默認情況下,循環變量是私有的。假設我們有一個線程這個循環頭:循環開始執行由OpenMP中的調度程序處理循環變量
#pragma omp parallel num_threads(4)
{
#pragma omp parallel for schedule(static,1)
for(i=0; i<40; i+=2) {
//...
}
}
之前,靜態調度可能會分配迭代如下:
主題1:迭代0,4,8, 12,16
線程2:迭代1,5,9,13,17
線程3:迭代2,6,10,14,18
線程4:迭代3,6,12,15,19
我不理解線程3是如何知道的i
在其第三次迭代的正確值(如果循環順序執行,這將是第10次迭代)。 i
是私人的,所以每個線程都有自己的副本並增加i
。同樣,i
的值必須以某種方式共享。這個怎麼用?
[你見過?](https://msdn.microsoft.com/en-us/library/x5aw0hdf.aspx) – Kenney