int DIMENSION = 4, totalPair = 0;
#pragma omp parallel for private(sx,dy,dx)
for(sy=0; sy<DIMENSION; sy++)
for(sx=0; sx<DIMENSION; sx++)
for(dy=0; dy<DIMENSION; dy++)
for(dx=0; dx<DIMENSION;dx++){
totalPair++;
}
该程序使用16个openmp线程将totalPair返回256。 但是,如果我将collapse子句视为下面的代码,那么返回的值将变为254,包含16个线程。另一方面,如果线程数与DIMENSION数相同,则totalPair变为256,这是正确的。
int DIMENSION = 4, totalPair =0;
#pragma omp parallel for collapse(4) private(dx)
for(sy=0; sy<DIMENSION; sy++)
for(sx=0; sx<DIMENSION; sx++)
for(dy=0; dy<DIMENSION; dy++)
for(dx=0; dx<DIMENSION;dx++){
totalPair++;
}
而且,即使是下面的情况,也会将16个线程的totalPair返回255。所以,我想知道使用折叠时,最大允许线程数将等于最后一个循环的可能迭代次数。
int DIMENSION = 4, totalPair =0;
#pragma omp parallel for collapse(2) private(dy,dx)
for(sy=0; sy<DIMENSION; sy++)
for(sx=0; sx<DIMENSION; sx++)
for(dy=0; dy<DIMENSION; dy++)
for(dx=0; dx<DIMENSION;dx++){
totalPair++;
}