使用openmp collapse处理可能的线程数

时间:2018-04-20 06:57:35

标签: multithreading nested openmp

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++;                                                                 
 }

0 个答案:

没有答案