Parallelel If-else 循环与中断 openmp
Parallelel If-else loop with break openmp
我想知道是否有办法在openmp中并行化这段代码。此循环需要找到必须在另一种算法中分析next
元素。所以这个循环分析两个向量visited
和used
,如果它找到一个被访问但未使用的元素,next
等于k
并从循环中退出,设置 k 等于维度+1,如果没有访问和未使用的元素,循环尝试查找未访问且未使用的元素并设置 next=k。
,else if
中的语句不要中断循环,因为在向量中可以访问元素。
for (k=0;k<dimension;k++){
if (visited[k] == 1 && used[k]==0){
next = k;
fail =0;
k=dimension+1;
}
else if (visited[k] == 0 && used[k]==0) {
next = k;
fail = 1;
}
}
如何使用杂注 omp 并行化它?
这样的代码并行化并非易事。
首先,您必须在重置k
时摆脱隐式break
。
然后,您必须为next
和fail
变量制作向量,并将部分结果存储在那里。
现在你的循环可以平行化了,因为不再有相互依赖关系,只是你的结果现在是你仍然需要分析的向量。
要分析结果向量,你必须对它们进行前缀计算,以找到第一个索引i
,如果有的话,fail[i]
0
,并以next[i]
作为结果。
所有这些都可以完成,但没有什么先验地说你会因此而加速。这在很大程度上取决于您不同案例出现的概率。
相关文章:
- OpenMP阵列性能较差
- OpenMP卸载说'fatal error: could not find accel/nvptx-none/mkoffload'
- 使用 GCC 卸载的 OpenMP 卸载失败,并出现"Ptx assembly aborted due to errors"
- OpenMP:并行更新数组总是需要减少数组吗
- 如何使用OpenMP并行这两个循环
- 从python调用openMP共享库时,未定义opnMP函数
- 如何使用OpenMP并行化此矩阵时间矢量运算
- 如何使用OpenMP使这个循环并行
- 如何通过替换顺序代码的while循环来添加OpenMP for循环
- 查找最近配对时的OpenMP竞赛条件
- 使用输入打破 OpenMP 中的循环
- 类成员和中断
- 捕获标准输出以压缩并使用 CTRL-C 中断会给出损坏的 zip 文件
- 为什么 openmp 的并行不适用于矢量化色彩空间转换?
- 在 openmp 中,omp_get_thread_num是否绑定到物理线程?
- 在C++中使用并行化的预期速度是多少(不是 OpenMp,而是 <thread>)
- 我的代码运行良好,但在游戏循环中中断
- OpenMP 加上unordered_map<字符串、双字符串的缩减>
- Parallelel If-else 循环与中断 openmp
- OpenMP 不支持中断循环