openMP для l oop Ошибка сегментации (ядро сброшено) - PullRequest
0 голосов
/ 16 марта 2020

Я недавно начал изучать openMP, и я пытаюсь распараллелить мой код для свертки. Как только я добавил #pragma в for l oop, который инициализирует массив изображений и нет зависимости от данных, код сломался и выдал ошибку сегментации (ядро сброшено). Я не мог понять, что не так. Пожалуйста, помогите!

  // 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 голосов
/ 16 марта 2020

Рассчитанные индексы не соответствуют выделенному размеру. Действительно, размер выделенного массива padded_image не зависит от n, тогда как доступ к нему в целевом l oop не зависит. Что касается l oop, размер массива, вероятно, должен быть: (n + (padding * 2)) * (n + (padding * 2)).

Обратите внимание, что padded_image не удаляется. Кроме того, модуль очень медленный, пожалуйста, рассмотрите возможность использования двух циклов с предложением OpenMP collapse(2).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...