计算机系统结构教程(第二版)
习题9
9.9
(2) 用Cube0和构成混洗交换网(每步只能使用Cube0 和shuffle 一次),网络直径是多少?
从5号处理机发送数据到7号处理机,最短路径要经过几步?请列出经过的处理机编号。
floyd-warshall算法求最短路径
for (k = 0; k < 32; k++)/*allow all processor to be the trans point*/
for (i = 0; i < 32; i++)
for(j = 0; j < 32; j++){
Dikkj = distance[i][k]+distance[k][j];
if (Dikkj < distance[i][j]){
distance[i][j] = Dikkj;
trace[i][j] = k;
}
}
路径输出
int printTrace(int i,int j){
if(trace[i][j] != INFINITE){
printTrace(i,trace[i][j]);
printf("-> %d",trace[i][j]);
printTrace(trace[i][j],j);
}
return 0;
}
理解:每步只能使用cube0 一次或shuffle 一次
构造交换网
for (i = 0; i < 32; i++){
j = i ^ 0x0001;
distance[i][j] = 1;
j = ( (i >> (5 - 1)) |(i << 1)) % 32;
distance[i][j] = 1;
distance[i][i] = 0;
}
节点距离矩阵及路径
$ ./interConnNetwork
distance:
0,1,2,3,3,4,4,5,4,5,5,6,5,6,6,7,5,6,6,7,6,7,7,8,6,7,7,8,7,8,8,9,
1,0,1,2,2,3,3,4,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,5,6,6,7,6,7,7,8,
5,4,0,1,1,2,2,3,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,
6,5,1,0,2,3,1,2,3,4,4,5,2,3,3,4,4,4,5,5,5,5,6,6,3,4,4,5,4,5,5,6,
4,3,4,4,0,1,5,5,1,2,2,3,6,5,6,6,2,3,3,4,3,4,4,5,7,8,6,7,7,8,7,8,
5,4,5,5,1,0,6,6,2,3,1,2,5,4,6,5,3,4,4,5,2,3,3,4,6,7,5,6,7,7,6,7,
6,5,5,4,6,6,0,1,7,6,6,5,1,2,2,3,4,3,5,4,5,4,6,5,2,3,3,4,3,4,4,5,
7,6,6,5,7,6,1,0,8,7,7,6,2,3,1,2,5,4,5,4,6,5,6,5,3,3,4,4,2,3,3,4,
3,2,3,3,4,3,4,4,0,1,4,5,5,6,5,6,1,2,2,3,5,6,6,7,6,7,7,8,6,7,7,8,
4,3,4,4,3,2,4,3,1,0,3,4,5,6,4,5,2,3,1,2,4,5,5,6,6,6,7,7,5,6,6,7,
6,5,6,6,5,4,6,5,3,2,0,1,4,3,5,4,4,5,3,4,1,2,2,3,5,6,4,5,