OpenMP для диапазонов петель - PullRequest
0 голосов
/ 23 февраля 2012

Я бы хотел использовать OpenMP для распараллеливания операций на 2-мерной сетке, где каждый поток будет работать с подразделом сетки.

Представьте себе функцию f(lower,upper,grid), которая будет обрабатывать подраздел, учитывая его нижнюю и верхнюю границы (предположим, что нижняя и верхняя относятся к одной из осей сетки).

У меня вопрос: можно ли позвонить f без явного вычисления lower и upper?

Например, если у меня есть цикл for, OpenMP автоматически разделит цикл между потоками. Есть ли способ заставить OpenMP разделить диапазон и выделить куски диапазона в f?

Спасибо!

Обновление:

Чтобы уточнить, был ли у меня цикл for:

#pragma omp parallel for
for(int i=0;i<50;i++)

OpenMP разделил бы цикл for. То, что я хотел бы знать, сродни знанию того, как был разделен цикл for.

Ответы [ 2 ]

0 голосов
/ 23 февраля 2012

Я достаточно уверен, что ответ на ваш вопрос - нет.Я думаю, что вам придется написать код, такой как

f(lower(omp_get_thread_num()),upper(omp_get_thread_num()),grid)

, где upper() и lower() теперь функции, которые выполняют декомпозицию домена, которую вы хотите, и которые принимают идентификатор потока в качестве входного аргумента.1006 *

Я оставляю на ваше усмотрение определить, соответствует ли соответствие OpenMP вашему стилю работы или адаптация вашего способа работы к OpenMP (что в данном случае означало бы, что OpenMP лучше разделять итерации цикла между потоками)в каком-либо смысле (значениях) для вас.

0 голосов
/ 23 февраля 2012

вы можете попробовать omp task в зависимости от масштаба каждой задачи (тяжелее, чем parallel for

...