Итак, у меня есть цикл, в котором я повторяю элементы вектора, вызываю функцию для каждого элемента, и если она соответствует определенным критериям, я нажимаю ее на список.Преобразование для цикла в OpenMP
my_list li;
for (auto itr = Obj.begin(); itr != Obj.end(); ++itr) {
if ((*itr).function_call())
li.push_back((*itr);
}
Я думал о том, чтобы оптимизировать свою программу, и я наткнулся на OpenMP, но много образец кода трудно следовать.
Может ли кто-нибудь пройти меня, как преобразовать вышеуказанный цикл, чтобы использовать несколько ядер параллельно?
Спасибо.
Хорошей практикой является использование неназванной критической конструкции. Вы должны добавить к нему имя, чтобы убедиться, что критический только защищает структуру данных li. В противном случае критический может повлиять на другие критические разделы, которые не обязательно должны быть взаимоисключающими в фрагменте кода. –
Я бы перебирал вектор через указатель на начало данных и запускал индекс. for (T * = & obj [0], size_t i = 0, size_t size = obj.size(); ++ i {} – egur
Отличный улов, спасибо Майклу. Отредактировано решение сейчас. – ikikenis