openmp - openmp中的关键指令是否可以命名变量?
问题描述
我想运行以下循环来并行计算元素。由于count[j]
仅由(X[i] / exp) % 10
评估为的迭代更新,因此j
我想为每个定义不同的关键部分。我首先想到在每个数组元素上使用归约子句,但这给出了编译错误。我知道这段代码是错误的,但我应该如何实现这种事情?
#pragma omp parallel for
for (i = 0; i < n; i++)
#pragma omp critical((X[i] / exp) % 10)
count[(X[i] / exp) % 10]++;
解决方案
对于像这样只有一次更新的事情,正常的解决方案是使用原子。
#pragma omp atomic
count[(X[i] / exp) % 10]++;
或者,您可以在整个阵列上使用 OpenMP 归约,请参阅OpenMP 4.5 示例的第 238 页上的示例归约.7.c
推荐阅读
- java - Java:使用while循环改变行的顺序
- python - 使用 Rsync 从 EC2 自动备份到 NAS
- spyder - 执行前重启 spyder ipython 控制台
- javascript - 使用eslint错误更新javascript数组中所有对象的对象值
- openssl - 无法连接:加载 X.509 密钥对时出错
- python - Matplotlib FuncAnimation 抛出“AttributeError:‘NoneType’对象没有属性‘间隔’”
- azure-active-directory - 在 .NET Core 3.1 中验证 Azure AD 生成的 JWT 签名和算法
- outlook-2013 - Outlook 2013 中附加文件的默认文件夹更改
- javascript - 如何在密码字段中添加图标以在 Rails 中显示和隐藏密码
- pine-script - 每次多头/空头入场时都需要重置 ATR 追踪止损