내부 루프로 루프를 병렬 처리하려고합니다. 내 코드는 다음과 같습니다 :OpenMP : 중첩 된 루프를 병렬 처리 할 수 없습니다.
#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)
모두를위한 절
private(jb,ib)
을 변경하는 경우 변경되고있다. 몇 가지 스레드 proc에 대한 하나의 스레드를보다 빠르게 계산하는 것을 의미합니다. 문제가 무엇입니까?
여기에 더 많은 것을 할 필요가 없습니다. 무엇이 packWT, multblock, a 등입니까? -하지만 ib가 비공개가되도록해야합니다. 그렇지 않으면 스레드가 동일한 루프 색인을 겹쳐 쓰게됩니다. 사적인 (ib)없이 빠르다는 이유는 아마도 많은 ib가 그것없이 건너 뛴다는 것입니다 ... –
사실 개인 (ib)없이 나는 잘못된 결과를 얻습니다. 많은 시간 동안 왜 시간이 같은지 여전히 알지 못합니다. 하나의 스레드가 ... – Pelsono
많은 이유가있을 수 있지만, 우리 중 누구도 더 이상의 정보 없이는 아무 것도 말할 수 없습니다. –