我的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 来避免这种情况。
  • vec1vec2 vector 的
  • 复制开销可能大于性能奖励。

  • 总而言之,这是关于可并行化的 vector 类型的问题-请参阅您选择的openMP文档,以了解有关可并行访问的类型的更多信息。

    09-26 22:10