Openmp初始化向量

时间:2014-02-20 15:37:01

标签: c++ c parallel-processing openmp

我想知道为什么如果我使用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

1 个答案:

答案 0 :(得分:0)

OpenMP确实会产生一些开销。我不知道你有什么7000,但是像double或int这样的小型7000可能适合单个处理器的最快L1缓存,当然适合下一个更大的缓存,这意味着你要并行化代码在连续案例中已经接近最佳案例表现了。

此外,如果您的mat变量仅存在于一个位置,则线程可能会争夺对它的引用,从而导致争用并减慢速度。