Я хочу распараллелить цикл с внутренним циклом внутри него. Мой код выглядит так:
#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])
}
}
Я измеряю время, затраченное на вычисление этих циклов. Это то же самое для нескольких потоков, что и для одного потока. Когда я изменяю пункт
private(jb,ib)
для
private(jb)
Все меняется. Я имею в виду, что для нескольких потоков процесс вычисляется быстрее, чем для одного потока. В чем проблема?