gpt4 book ai didi

c++ - 使用#pragma omp parallel 让程序变慢

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:17:01 28 4
gpt4 key购买 nike

我的 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 秒。这比按顺序运行程序所花费的时间还多。

如果有人能帮助我解决这个问题,我将不胜感激。

最佳答案

这可能会以多种方式出错:

  1. 在不知道 result 类型的情况下,可能必须内置障碍以避免在修改它时出现竞争条件——您可以通过在之后合并并行结果 vector 来避免这种情况。
  2. vec1vec2 vector 的复制开销可能大于性能奖励。

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

关于c++ - 使用#pragma omp parallel 让程序变慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28398764/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com