我想知道为什么如果我使用openmp来初始化使用此代码的向量,它会更慢:
尺寸= 7000; CHUNKSIZE = 700;
这些用于两个不同的地方。
#pragma omp parallel for schedule (static, chunksize) private(i)
for (i=0;i<dimension;i++){
visited[i]=0;
used[i]=0;
connected[i]=0;
}
#pragma omp parallel for schedule(static,chunksize) private(j)
for(j=0;j<dimension;j++){
if (mat[next][j]) {
visited[j]=1;
connected[j]=tag;
}
}
我有4个核心(2个物理,2个逻辑),这些是第一个的速度: 没有Openmp:0.000048 使用Openmp:0.000168
答案 0 :(得分:0)
OpenMP确实会产生一些开销。我不知道你有什么7000,但是像double或int这样的小型7000可能适合单个处理器的最快L1缓存,当然适合下一个更大的缓存,这意味着你要并行化代码在连续案例中已经接近最佳案例表现了。
此外,如果您的mat
变量仅存在于一个位置,则线程可能会争夺对它的引用,从而导致争用并减慢速度。