我想知道是否有办法在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;
}
}
如何将它与pragma omp并行化?
答案 0 :(得分:0)
此类代码并行化并不容易。
首先,在重置break
时,您必须摆脱隐含的k
。
然后,您必须为next
和fail
变量制作向量,并将部分结果存储在那里。
现在你的循环可以被平行化,因为不再存在相互依赖性,只是你的结果现在是你仍需要分析的向量。
要分析结果向量,您必须对它们进行前缀计算,以找到第一个索引i
,如果有,fail[i]
为0
并取next[i]
结果。
所有这一切都可以完成,但没有任何事先说过你将获得加速。这在很大程度上取决于您的不同案例出现的概率。