相关疑难解决方法(0)

理解openmp中的collapse子句

我遇到了一个具有崩溃条款的OpenMP代码,这对我来说是新的.我试图理解这意味着什么,但我认为我没有完全理解它的含义; 我发现的一个定义是:

COLLAPSE:指定嵌套循环中应将多少循环折叠到一个大的迭代空间中,并根据schedule子句进行划分.在所有关联循环中顺序执行迭代确定了折叠迭代空间中迭代的顺序.

我以为我理解了这意味着什么,所以我尝试了以下简单的程序:

int i, j;
#pragma omp parallel for num_threads(2) private(j)
for (i = 0; i < 4; i++)
    for (j = 0; j <= i; j++)
        printf("%d %d %d\n", i, j, omp_get_thread_num());
Run Code Online (Sandbox Code Playgroud)

哪个产生了

0 0 0
1 0 0
1 1 0
2 0 0
2 1 0
2 2 1
3 0 1
3 1 1
3 2 1
3 3 1
Run Code Online (Sandbox Code Playgroud)

然后我添加了该collapse(2)条款.我希望在前两列中得到相同的结果,但现在在最后一列中有相同数量的0's 1' 和's'.但是我得到了

0 0 0
1 0 …
Run Code Online (Sandbox Code Playgroud)

c openmp

26
推荐指数
1
解决办法
3万
查看次数

标签 统计

c ×1

openmp ×1