Моя программа на C++ занимает около 300 секунд для запуска. Внутри моей программы мне нужно разделить мои векторы. Анализатор VS говорит, что это занимает около 15% времени работы. вот код:с использованием #pragma omp parallel для медленной работы программы
template <class T> myVector<T> cWisDivide(myVector<T> &vec1,
myVector<T> &vec2)
{
try
{
if (vec1._rows == vec2._rows)
{
myVector<T> result(vec1._rows);
//#pragma omp parallel for
for (int r = 1; r <= vec1._rows; r++)
{
if (vec2(r) != 0)
{
result(r) = vec1(r)/vec2(r);
}
else
{
throw std::runtime_error("");
}
}
return result;
}
}
catch (const exception &e)
{
....
}
}
Эта функция называется много раз. Если я использую #pragma ... перед циклом, использование процессора составляет 100% в течение примерно 350 секунд. что больше, чем время, затрачиваемое на последовательное выполнение программы.
Буду признателен, если кто-нибудь может помочь мне в этом вопросе.
Насколько велик 'vec1._rows'? –
'r' в цикле' for' должен быть определен до 'for'. Например: 'int r; #pragma .... for (r = 1 ...) ' –
Попробуйте выполнить параллельную область дальше наружу. Если вы вызываете функции много раз, вы также платите за инициализацию каждый раз, когда вы ее вызываете. – Chiel