openMP for循环分段错误(核心已转储)

时间:2020-03-16 19:54:14

标签: c++ openmp

我最近开始学习openMP,并且试图并行处理卷积代码。一旦我将#pragma添加到用于初始化图像数组的for循环中,并且没有数据依赖关系,代码就会中断并引发Segmentation Fault(核心转储)。我不知道怎么了。请帮忙!

  // map values from original image to padded image
#pragma omp parallel for schedule(static)  
  for (size_t j = 0; j < n * n; j++) {
    size_t row = (j / n) + padding;
    size_t col = (j % n) + padding;
    size_t pos = (n + (padding * 2)) * row + col;
    padded_image[pos] = image[j];
  }

1 个答案:

答案 0 :(得分:1)

计算的索引与分配的大小不匹配。 确实,分配的数组padded_image的大小不依赖于n,而在目标循环中对数组的访问却不依赖于(n + (padding * 2)) * (n + (padding * 2))。 关于循环,数组的大小可能应该是:padded_image

请注意,collapse(2)未被删除。 此外,模数非常慢,请考虑使用两个带有OpenMP子句{{1}}的循环。