【发布时间】:2017-10-24 20:39:24
【问题描述】:
我正在使用以下代码来查找使用 OpenMP 任务构造的数组元素的总和。
代码在 n = 10000 之前产生正确的结果。
但除此之外,我遇到了分段错误。使用gdb,我发现故障发生在对reduce() 的递归调用之一中。输入数组分配没有问题,我已经验证过了。
有人对可能出现的问题有什么建议吗?
int reduce (int *arr, unsigned long int n)
{
int x;
if (n <= 0)
return 0;
#pragma omp parallel
{
#pragma omp single nowait
{
#pragma omp task shared(x)
x = reduce(arr, n-1) + arr[n-1];
#pragma omp taskwait
}
}
return x;
}
【问题讨论】:
-
n是< 0时,它是unsigned,怎么会变成< 0? -
增加你的堆栈大小,看看
OMP_STACKSIZE -
请格式化您的代码。这太丑了,很痛。
标签: c parallel-processing segmentation-fault openmp