Visual Studio 2015를 사용하여 omp 작업을 사용할 수 없기 때문에 중첩 루프 작업에 대한 해결 방법을 찾으려고합니다. 다음과 같이 코드는 다음과 같습니다OMP 2.0 중첩 루프 For
#pragma omp parallel
{
for (i = 0; i < largeNum; i++)
{
#pragma omp single
{
//Some code to be run by a single thread
memset(results, 0, num * sizeof(results[0]));
}
#pragma omp for
for (n = 0; n < num; n++) {
//Call to my function
largeFunc(params[n], &resulsts[n])
}
}
#pragma omp barrier
}
내 모든 스레드가 largeNum 시간을 실행하지만, memset 함수가 0으로 설정 될 때까지 기다려야 할 다음 내가 largeFunc 각 스레드에 의해 수행되어야합니다. 내가 찾은 데이터 의존성이 없습니다.
나는이 시점에서 omp 지시문이 모두 뒤죽박죽 인 것을 알게되었습니다. 이 솔루션이 작동합니까? 작업없이 할 수있는 더 좋은 방법이 있습니까?
감사합니다, 아리
'for' 루프를'largeFunc'로'#pragma omp parallel for'을 사용하고 나머지 omp stuff를 제거하지 않는 이유는 무엇입니까? 그 루프는 당신이 평행하게 달리기를 원하는 유일한 것처럼 보입니다. – amaurea
나는 threads를 통해 largeNum 루프를 나누고 싶지 않습니다. –