gpt4 book ai didi

c++ - 如何处理 OpenMP 并行代码中的返回?

转载 作者:太空狗 更新时间:2023-10-29 23:49:24 25 4
gpt4 key购买 nike

我的需求是这样的:每个线程自己分配内存,然后处理:

typedef struct
{
......
}A;

A *p[N];

#pragma omp parallel
{
#pragma omp for
for (int i = 0; i < N; i++) {
p[i] = (A*)calloc(sizeof(*p[i]), N);
if (NULL == p[i]) {
return;
}
......
}
}

但是编译器会报错:

error: invalid exit from OpenMP structured block
return;

所以除了将分配内存的代码放在#pragma omp parallel之外:

for (int i = 0; i < N; i++) {
p[i] = (A*)calloc(sizeof(*p[i]), N);
if (NULL == p[i]) {
return;
}
}
#pragma omp parallel
{
#pragma omp for
......
}

有没有更好的方法?

最佳答案

我想你正在寻找这个:

#pragma omp parallel
{
#pragma omp for
for (int i = 0; i < N; i++) {
p[i] = (A*)calloc(sizeof(*p[i]), N);
if (NULL == p[i]) {
#pragma omp cancel for
}
......
}
}

但是您需要将环境变量 OMP_CANCELLATION 设置为 true 才能正常工作。

不过,您应该尽量避免这样做,因为取消的费用很高。

关于c++ - 如何处理 OpenMP 并行代码中的返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41886513/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com