OpenMP, C ++ и итераторы - PullRequest
       7

OpenMP, C ++ и итераторы

5 голосов
/ 30 июня 2010

Чтобы зациклить элементы контейнера, я бы обычно использовал итератор, например так:

container<type> myContainer;
// fill up the container
container<type>::iterator it;
for(it=myContainer.begin(); it!=myContainer.end(); ++it) {
   //do stuff to the elements of the container
}

Теперь, если я хочу распараллелить цикл с использованием OpenMP, я мог бы попробовать что-то вроде:

container<type> myContainer;
// fill up the container
container<type>::iterator it, it_begin=myContainer.begin(), it_end=myContainer.end();
#pragma omp parallel for default(none) private(it) shared(it_begin, it_end)
for(it=it_begin; it!=it_end; ++it) {
   //do stuff to the elements of the container
}

Однако, когда я запускаю указанный код, изменения не вносятся в контейнер. Однако, если я использую типичное индексирование для контейнера, параллельный код работает нормально. Что мне интересно, так это то, можно ли использовать итераторы в контексте OpenMP или мне нужно преобразовать повторяющийся цикл в индексированный цикл?

1 Ответ

4 голосов
/ 30 июня 2010

Распараллеливание для итераторов STL разрешено только в OpenMP 3.0. Какую версию OpenMP поддерживает ваш компилятор?

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