小编Len*_*nBo的帖子

性能 OpenMP 崩溃与大型嵌套循环的不崩溃

我想知道是否有人更了解大型嵌套循环的崩溃原因的性能?意思是我想比较编译指示

omp parallel for private(i,j,k) collapse(3) schedule(static)

omp parallel for private(i,j,k) schedule(static)

对于嵌套循环结构,如

for(int i=0; i<i_max; i++){
  for(int j=0; j<j_max; j++){
   for(int k=0; k<k_max; k++){
     A[i][j][k]=B[i][j][k]+C[i][j][k];
                              }
                             }
                            }
Run Code Online (Sandbox Code Playgroud)

其中 i_max、j_max 和 k_max 都比可用线程数大 5 - 10 倍。

如果我正确理解了崩溃原因,openmp 只会将 3 个循环折叠为一个具有相同大小的循环,i_max*j_max*k_max如果(i_max*j_max*k_max) mod #threads = 0.

如果没有崩溃,openmp 只会让 i 循环并行,这是正确的吗?如果是这样,我的下一个假设将是获得最佳性能,i_max mod #threads = 0并且我希望两种 pragma 具有可比的性能。

正如你所看到的,我在这里几乎是在猜测。有没有人真正测试过这两种编译指示的性能?

c openmp

1
推荐指数
1
解决办法
2905
查看次数

标签 统计

c ×1

openmp ×1