3 / 3 / 0
Регистрация: 20.01.2014
Сообщений: 69
|
||||||||||||||||
1 | ||||||||||||||||
Распараллелить цикл со сложной индексацией используя OpenMP30.05.2015, 19:52. Показов 1595. Ответов 5
Метки нет (Все метки)
Пусть есть такой цикл, преобразующий массив:
Кликните здесь для просмотра всего текста
У меня есть следующие идеи. У нас есть внешний do-while цикл, который выполняется определенное число раз до достижения условия. То есть некоторое подобие волн. Одна волна преобразований, затем следующая, если первая завершилась неуспешно. Когда первый внутренний for пройдет несколько итераций, для радиуса 1 это 3 итерации, то можно заного его запускать в других потоках, до того как он завершится. При радиусе 1 у нас охватывается 3 элемента и когда пройдет 3 итерации первого for, его можно будет запустить еще раз в другом потоке не дожидаясь завершения. Но как это реализовать непонятно. Спецификации по OpenMP на openmp.org: http://www.openmp.org/mp-documents/OpenMP3.1.pdf
0
|
30.05.2015, 19:52 | |
Ответы с готовыми решениями:
5
Распараллелить, используя OpenMP Распараллелить метод Зейделя-Гаусса используя OpenMP Не удается правильно распараллелить программу табулирования функции, используя OpenMP Распараллелить метод Гаусса (OpenMP) |
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
|
|
31.05.2015, 01:19 | 2 |
если не ошибаюсь, у тебя результат i-й итерации зависит от результата (i-1)-й итерации, а такие вещи не параллелятся...
0
|
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
|
|
31.05.2015, 02:27 | 3 |
BlackUser, что хоть твоя штука должна делать? Может есть метод эффекивнее.
Какого порядка у тебя могут быть значения N и RADIUS? Может параллелить и нет смысла вовсе.
0
|
3 / 3 / 0
Регистрация: 20.01.2014
Сообщений: 69
|
|
31.05.2015, 14:38 [ТС] | 4 |
В рамках одноразовой обработки может и нет, но там цикл do-while. В нем вся суть, он может выполняться огромное число раз. Я задачу намеренно упростил, что бы было понятнее, в дальнейшем структура циклов еще может усложниться на многомерный случай(сейчас там двумерный).
В случае многих выполнений do-while можно обработать первые несколько элементов и не дожидаясь завершения первого, начать обработку начала массива в другом потоке. Естественно второй поток недолжен опережать индексацию первого потока. Радиус не более 5, N может быть достаточно большим, либо массив может быть многомерным.
0
|
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
|
|
31.05.2015, 14:51 | 5 |
Вы уж определитесь. Или хотите получить универсальное решение на все случаи жизни?
И да "код всей программы" отличается от кусков выше, что вызывает еще большую неразбериху.
0
|
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
|
|
31.05.2015, 15:16 | 6 |
Смотри: при радиусе в 1 у тебя 2 строка заполняется в зависимости от значений 1 и 3 строки. В них стоят 1, ничего плохого пока нет. После того, как заполнили 2 строку, начинаем заполнять 3-ю. Данные уже берутся из 2-й строки и 4-й, в которой по прежнему 1. Тем самым у тебя i-я строка зависит от i-1 -й строки. Аналогично для столбцов. Поэтому никак не распараллелишь...
0
|
31.05.2015, 15:16 | |
31.05.2015, 15:16 | |
Помогаю со студенческими работами здесь
6
Не могу разобраться с OpenMP! Как правильно распараллелить формулу? Распараллелить цикл Как распараллелить цикл while? Помогите распараллелить цикл!!! Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |