基于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接收进程