【问题标题】:OpenMP: complete first iteration firstOpenMP:首先完成第一次迭代
【发布时间】:2012-07-13 12:39:32
【问题描述】:

我有一个 C 并行 for 循环,其中包括类似的行

b[i] = b[0];

所以我需要在开始任何其他迭代之前完成第一次迭代。是否有强制执行此类行为的条款?

【问题讨论】:

  • 让 999 个 gpu 核心等待 1 个 gpu 核心完成比我认为在 cpu 中计算要慢
  • 因为您在第一个周期仅浪费 999*(gpu power) 为 1 gpu power。
  • @tuğrul 那又怎样?有时这是不可避免的。此外,这与普通串行代码中发生的情况相同。但这也无关紧要,OpenMP 不适用于 GPU。
  • 即使你只有 2-cpu 核心,让其他核心等待也可能引发死锁
  • 这里不涉及gpu,只有24个至强核心的工作站

标签: c loops for-loop openmp


【解决方案1】:

只需将第一次迭代拉出循环并从索引 1 开始循环。这是迄今为止最简单和最便宜的方法。其他方式涉及等待,这是低效的。

【讨论】:

  • 是的,这就是我所做的,但感觉有点“脏”。我希望 OpenMP 会为此提供一个子句
猜你喜欢
  • 1970-01-01
  • 2020-07-02
  • 1970-01-01
  • 1970-01-01
  • 2016-04-13
  • 1970-01-01
  • 2023-02-07
  • 2013-10-24
  • 1970-01-01
相关资源
最近更新 更多