我的C++程序大约需要300秒才能运行。
在我的程序中,我需要Cwis分割 vector 。 VS分析器告诉您,这需要大约15%的运行时间。这是代码:
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 ...,则CPU使用率会持续100%持续350 s。这比顺序运行程序所花费的时间更多。
如果有人可以在这个问题上帮助我,我将不胜感激。
最佳答案
这可能以多种方式出错:
result
类型的情况下,有可能必须内置障碍才能避免在修改竞争条件时出现竞争条件-您可以通过合并并行的结果 vector 来避免这种情况。 vec1
和vec2
vector 的总而言之,这是关于可并行化的 vector 类型的问题-请参阅您选择的openMP文档,以了解有关可并行访问的类型的更多信息。