我遇到的問題了解OpenMP如何與嵌套循環一起工作。請幫忙!OpenMP嵌套循環,代碼在幹什麼?
我得到了下面的代碼以並行方式運行:
#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