我想将循环与其中的内循环并行化。我的代码如下所示:
#pragma omp parallel for private(jb,ib) shared(n, Nb, lb, lastBlock, jj, W, WT) schedule(dynamic) //private(ib, jb) shared(n, Nb, lb, lastBlock, jj, W, WT) //parallel for loop with omp
for(jb=0; jb<Nb; jb++)
{
int lbh = (jb==Nb-1) ? lastBlock : lb;
int ip = omp_get_thread_num();
packWT(a, n, lb, s, jb, colNr, WT[ip], nr); //pack WWT[jb]
for(ib=jb; ib<Nb; ib++)
{
int lbv = (ib==Nb-1) ? lastBlock : lb;
multBlock_2x4xk(a, n, jj + ib*lb, jj + jb*lb, W+ib*lb*lb, WT[ip], lb, lbv, lbh); //MULT BLOCK - 2x4xK (W[jb]*W[ib])
}
}
我测量了 proc 计算这个循环所花费的时间。对于几个线程来说,这与对于一个线程来说是一样的。当我改变条款时
private(jb,ib)
for
private(jb)
一切都在改变。我的意思是,对于少数线程来说,proc 的计算速度比一个线程的计算速度要快。问题是什么?