基于MPI的Warshall算法实现及其优化
1. Warshall算法分析
1.1 Warshall算法(串行)分析
Warshall算法是求解关系矩阵传递闭包的算法。
输入:关系R的关系矩阵
输出:关系R的传递闭包矩阵
1.1.1 Warshall算法的串行算法分析
Warshall算法的串行算法类C描述
初始化矩阵;
for (i=0;i<n;i++) /*生成传递闭包矩阵*/
for (j=0;j<n;j++)
{for(k=0;k<n;k++)
a[i][j]=a[i][j]||(a[i][k]&&a[k][j]);
}
输出传递闭包矩阵;
1.2 Warshall算法的并行算法分析
/*0号进程负责输入初始矩阵*/
for(i=0;i<N;i++)
for(j=0;j<N;j++)
if(a[j][i])
{0号进程把i值发送给pro号进程;
0号进程把j值发送给pro号进程;
0号进程第i行值发送给pro号进程;
0号进程第j行值发送给pro号进程;
0号进程接收pro号进程发来的处理后的第j行的值,并放到0进程的第j行中;
}
/*pro号进程的工作原理*/
{ 进程pro接收进程0发送的i的值;
进程pro接收进程0发送的j的值;
进程pro接收进程0发送的第i行元素;
进程pro接收进程

该博客详细分析了Warshall算法的串行和并行版本,并使用MPI实现了一个并行版本。通过SPMD模型,0号进程负责输入矩阵和协调通信,其他进程并行处理计算。在SGI300上成功编译和运行,通过优化减少消息传递,提高处理大规模数据时的效率。
最低0.47元/天 解锁文章
935

被折叠的 条评论
为什么被折叠?



