使用OPENMP使用12个线程,使用减少总和的速度加速仅为2倍

时间:2014-07-20 05:39:26

标签: c multithreading openmp

我有一个代码片段,它是on on dimension y []的总和。我想使用omp for来加速它,并在12核心节点上创建12个线程来执行此代码片段。当我测试时间时,事实证明,当我在单核上执行此部分时,时间只有一半(没有并行)。有人请给我一些说明如何加快这部分的速度?

我尝试将时间表更改为guided,但它无效。

Da_re=Da_im=Db_re=Db_im=Na=Nb=0.0;
#pragma omp parallel shared(Da_re,Da_im,Db_re,Db_im,Na,Nb,y,Ns) private(sk)
{
#pragma omp for schedule(static) reduction(+:Da_re,Da_im,Db_re,Db_im,Na,Nb)
for(sk=0;sk<=16*(Ns-1);sk+=16) // the dimension for y[] is 16*Ns=16*803*803
    {
    Da_re += y[sk+0];   
    Da_im += y[sk+1];
    Db_re += y[sk+2];
    Db_im += y[sk+3];
    Na += y[sk+4]+y[sk+5];
    Nb += y[sk+6]+y[sk+7];
    }
}

1 个答案:

答案 0 :(得分:1)

7毫秒的方式太小而无法进行有意义的测量。这就像试图告诉两个女仆中的哪一个通过将它们送到城镇清洁壁橱来更快地清除它们。所有你正在测量的是开始工作然后停止工作的开销,你没有测量他们工作的实际时间。