gpt4 book ai didi

c++ - OpenMP 在 for() 循环中面临的情况

转载 作者:行者123 更新时间:2023-11-30 03:54:08 52 4
gpt4 key购买 nike

我正在为此使用 OpenMP,但我对自己的答案也没有信心。在这方面真的需要你的帮助。我一直想知道哪种方法(串行或并行)的运行速度更快。我的 #pragma 命令(设置为注释)如下所示。

Triangle Triangle::t_ID_lookup(Triangle a[], int ID, int n)
{
Triangle res; int i;
//#pragma omp for schedule(static) ordered
for(i=0; i<n; i++)
{
if(ID==a[i].t_ID)
{
//#pragma omp ordered
return (res=a[i]); // <-changed into "res = a[i]" instead of "return(...)"
}
}
return res;
}

最佳答案

  1. 这取决于n。如果 n 较小,则 OMP 线程所需的开销会使 OMP 版本变慢。这可以通过添加 if 子句来解决:#pragma omp parallel if (n > YourThreshhold)
  2. 如果所有 a[i].t_ID 都不是唯一的,那么在使用 OMP 时您可能会从相同的数据中收到不同的结果。
  3. 如果您的函数中有更多的东西而不仅仅是一个比较,请考虑添加一个共享标志变量来指示它已找到,以便比较 if(found) continue; 可以添加到循环的开始。
  4. 我没有使用ordered 的经验,所以如果这是您问题的症结所在,请忽略以上所有内容并考虑this。回答。
  5. 简介。最后,没有更好的答案。
  6. 如果您仍然想要一个理论上的答案,那么随机查找将是 O(n),平均值为 n/2,而 OMP 版本将是一个常量 n/k,其中 k 是线程/内核的数量,不包括开销。

有关编写循环的另一种方法,请参阅 Z Boson对另一个问题的回答。

关于c++ - OpenMP 在 for() 循环中面临的情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29735189/

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