爲什麼此程序將結果打印爲64而不是5000?如果計數變量正在關鍵部分中更新,我預計只有一個線程可以在任何給定的時間點訪問它。因此,每個線程將能夠增加計數,併產生結果5000,所以爲什麼我得到64而不是回答?使用omp_set_num_threads()更新線程的線程更新數量比預期的要少
#include <iostream>
#include <omp.h>
using namespace std;
int main()
{
int count = 0;
omp_set_num_threads(5000);
#pragma omp parallel
{
#pragma omp critical
{
count++;
}
}
cout << "count = " << count << endl;
system("pause");
return 0;
}
Jonathan Dursi,那我應該怎麼添加兩個5000個元素的數組呢? 64個線程如何執行SIMD添加5000個元素? –
@ user3670482,只需使用'omp parallel for',不用擔心線程的數量;分解將爲你完成,每個線程將處理多個項目。這是OpenMP中的常用方法 - 這不是CUDA,或者甚至是SIMD(它現在可以在4.0中通過OpenMP調用,但是是獨立的) - 它是通常的粗粒度並行性,甚至是性能所必需的,用於處理多個項目的線程。 –