openmp 并行 速度更慢_OpenMP和C并行for循环:为什么我的代码在使用OpenMP时会变慢?...
我有一個關于使用OpenMP(使用C)的簡單問題,我希望有人可以幫助我.我在下面添加了一個小例子來說明我的問題.
#include
#include
#include
#include
using namespace std;
int main(){
srand(time(NULL));//Seed random number generator
vectorv;//Create vector to hold random numbers in interval [0,9]
vectord(10,0);//Vector to hold counts of each integer initialized to 0
for(int i=0;i<1e9;++i)
v.push_back(rand()%10);//Push back random numbers [0,9]
clock_t c=clock();
#pragma omp parallel for
for(int i=0;i
d[v[i]]+=1;//Count number stored at v[i]
cout<
for(vector::iterator i=d.begin();i!=d.end();++i)
cout<
return 0;
}
上面的代碼創建了一個向量v,它包含[0,9]范圍內的10億個隨機整數.然后,代碼循環通過v計算每個不同整數的實例數(即,在v中找到多少個,有多少兩個,等等)
每次遇到特定整數時,通過遞增向量d的適當元素來計算它.因此,d [0]計算多少個零,d [6]計算多少個六,依此類推.到目前為止有道理嗎?
我的問題是當我嘗試使計數循環并行時.如果沒有#pragma OpenMP語句,我的代碼需要20秒,但是使用pragma需要60秒.
很明顯,我誤解了一些與OpenMP相關的概念(也許是如何共享/訪問數據的?).有人可以解釋我的錯誤,或者指點我用一些有見識的文獻和適當的關鍵詞來幫我搜索?
總結
以上是生活随笔為你收集整理的openmp 并行 速度更慢_OpenMP和C并行for循环:为什么我的代码在使用OpenMP时会变慢?...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 免费正确使用计算机ppt,计算机基础课件
- 下一篇: all country运营商APN接入点