我正在尝试使用OpenMP并行编译Floyd-Warshall算法(基本上就地编辑2D数组),但我怀疑我是以最好的方式进行的,这就是我的意思到目前为止:
#pragma omp parallel for private(i, j, k) shared(g)
for ( i = 0; i < n; i++ ) {
for ( j = 0; j < n; j++ ) {
for ( k = 0; k < n; k++ ) {
g->A[j][k] = imin( g->A[j][k], g->A[j][i] + g->A[i][k] );
}
}
}
任何想法如何更好地利用OpenMP?在刚刚运行一半的时刻,肯定可以改进。
另外,如果有人对其他技术的建议用于并行化,我全都耳朵。我考虑过MPI,但是我必须让我的整个main
函数并行吗?
感谢。
修改
上面的代码不起作用,下面的答案说明原因。
答案 0 :(得分:2)
并行化算法并不简单。请参阅此处的说明 http://www.mcs.anl.gov/~itf/dbpp/text/node35.html 有关并行运行它的信息。如果你有少量的处理器(双核,四核,八核机器),那么Parallel Floyd 1可能适合你。如果你有大量的处理器(非常棒的GPU,网状计算机),那么Parallel Floyd 2可能会更好。