Я хочу использовать openmp для ускорения кода, как показано ниже.Как использовать openmp с перерывом в петле while
Код только для объяснения операций, а не реальных.
Iterator iterator(records);
while(iterator.next())
{
int current_id = iterator.current_row_index();
bool result = index.find(records[current_id])
if (result == false)
if (index.insert(records[current_id]) == false)
break;
}
return iterator.current_row_index();
Индекс является общим для всех потоков.
Вот некоторые мысли от меня:
- с помощью директивы параллельного OMP, убедитесь, что потоки выполняются в порядке.
- с использованием omp критической директивы для управления итератором.
- с использованием omp критической директивы для поиска в индексе и вставки в индекс.
, но я действительно сомневаюсь в ускорении, поскольку почти вся операция находится в критическом состоянии.
Есть ли советы по ускорению использования кода с помощью openmp?
Спасибо!
является итератором только передним итератором? Может ли он использоваться как итератор с произвольным доступом? – Anton
@ Антон теперь только форвардный итератор, но я мог изменить его для поддержки назад. но он не может быть произвольным доступом. И я предпочитаю не изменять код итератора. – b8flowerfire
Вы хотите остановить первый индекс, который был бы найден в цикле серийного цикла или в любом индексе? – Walter