OpenMP가 중첩 루프와 함께 작동하는 방식을 이해하는 데 문제가 있습니다. 도와주세요! 이 코드는 (난 그냥 운에 의해 그것을 가지고) 어떻게 작동하는지 아주 확실하지 않다, 그러나OpenMP Nested Loop, 코드는 무엇을하고 있습니까?
#pragma omp parallel private(i)
{
for(i=0; i<n; i++)
{
#pragma omp for
for(j=0; j<n; j++)
{
if(asubsref(seed,j) > 0)
asubsref(bin,j) = asubsref(bin,j) + 1;
}
#pragma omp for
for(j=0; j<n; j++)
asubsref(seed,j) = asubsref(seed,j) - asubsref(w,i);
}
}
:
나는 병렬로 실행하려면 다음 코드를 얻었다. 다음은 내가 생각하는 바가 무엇인지 ...그래서 for(i=0; i<n; i++)
은 다른 스레드로 분리되어 병렬로 실행됩니다. i
은 private
으로 선언되었으므로 루프의 각 인스턴스는 "샌드 박스 처리"됩니다. 즉, j
에 대한 변경 사항은 해당 스레드에 남아 있습니다 (적어도 모든 스레드가 완료 될 때까지). 나는 #pragma omp for
을 선언하지 않으면 코드가 깨어지기 때문에 혼란 스럽습니다 ... 왜 이것이지 모르겠습니다.
누군가이 코드가 수행하는 것을 통해 나를 걸을 수 있으면 대단히 감사하겠습니다. 고맙습니다!
http://publib.boulder.ibm.com/infocenter/comphelp/v7v91/index.jsp?topic=%2Fcom.ibm.vacpp7a.doc%2Fcompiler%2Fref%2Fruompfor.htm – imreal