Смешивание Boost FOREACH макрос и распараллеливание OpenMP - PullRequest
6 голосов
/ 22 ноября 2010

В настоящее время у меня есть код (на C) с внешним циклом, который распараллелен OpenMP (он работает локально в списке общей памяти). Я переписываю его на C ++, и для многих вещей я нашел макрос BOOST_FOREACH очень хорошим синтаксисом в виде конструкции цикла для итерации по списку, массиву и т. Д.

Мой вопрос: есть ли способ, как я могу использовать этот синтаксис и распараллелить цикл в стиле OpenMP?

Ответы [ 3 ]

2 голосов
/ 27 ноября 2010

Копирование с терминала стоит 1 киловорд:

$ g++ a.cpp -I/opt/boost-1.45.0/include -O -fopenmp   
a.cpp: In function ‘int main()’:
a.cpp:12: error: for statement expected before ‘if’
0 голосов
/ 22 ноября 2010

Почему бы просто не попробовать и не профилировать результат?

Я был бы впечатлен, если бы OpenMP парализовал boost_foreach, поскольку foreach в значительной степени полагается на трюки шаблонов для вывода типа контейнера.Если бы я был на вашем месте, я бы переписал foreach для использования регулярных циклов for.

0 голосов
/ 22 ноября 2010

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

...