这里长方形框中两个方格内的整数被看成是所移动的行块的编号。在要构成新的行块配 对时,只要将每个处理器所对应的行块按箭头方向移至相邻的处理器即可,这样的传送可以 在行块之间实现完全配对。当编号为i和j的两个行块被送至同一处理器时,令编号为i的 行块中的每行元素和编号为j的行块中的每行元素配对,以消去相应的非主对角元素,这样 在所有的行块都两两配对之后,可以将所有的非主对角元素消去一遍,从而完成一轮计算 由图1.1可以看出,在一轮计算中,处理器之间要2p-1次交换行块。为保证不同行块配对 时可以将原矩阵A的非主对角元素消去,引入变量b记录每个处理器中的行块数据在原矩 阵A中的实际行号。在行块交换时,变量b也跟着相应的行块在各处理器之间传送。 处理器之间的数据块交换存在如下规律 0号处理器前一个行块(简称前数据块,后一个行块简称后数据块)始终保持不变,将后 数据块发送给1号处理器,作为1号处理器的前数据块。同时接收1号处理器发送的后数据 块作为自己的后数据块 1号处理器首先将后数据块发送给编号为p-2的处理器,作为p-2号处理器的后数据 块。然后将前数据块移至后数据块的位置上,最后接收p-2号处理器发送的前数据块作为自 己的前数据块。 编号为 my rank的其余处理器将前数据块发送给编号为 my rank+1的处理器,作为 my rank+Ⅰ号处理器的前数据块。将后数据块发送给编号为 my rank-1的处理器,作为 my rank-1号处理器的后数据块。 为了避免在通信过程中发生死锁,奇数号处理器和偶数号处理器的收发顺序被错开。 使偶数号处理器先发送后接收:而奇数号处理器先将数据保存在缓冲区中,然后接收偶数号 处理器发送的数据,最后再将缓冲区中的数据发送给偶数号处理器。数据块传送的具体过程 描述如下: 算法214雅可比法求对称矩阵特征值的并行过程中处理器之间的数据块交换算法 输入:矩阵A的行数据块和向量b的数据块分布于各个处理器中 输出:在处理器阵列中传送后的矩阵A的行数据块和向量b的数据块 对所有处理器 my rank( my rank=0…,p-1)同时执行如下的算法 矩阵A和向量b为要传送的数据块* (1)if( my-rank=0)then/*0号处理器* (1.1)将后数据块发送给1号处理器 (1.2)接收1号处理器发送来的后数据块作为自己的后数据块 (2)if( my-rank=p-1)and(my- rank mod2≠0)then/*处理器p-1且其为奇数* (2.1)for=m/2tom-ldo/*将后数据块保存在缓冲区buer中* forj=0 to n-l do buffer(i-m/2=a[ij d fo 2.2 )for i=m/2 to m-I do这里长方形框中两个方格内的整数被看成是所移动的行块的编号。在要构成新的行块配 对时,只要将每个处理器所对应的行块按箭头方向移至相邻的处理器即可,这样的传送可以 在行块之间实现完全配对。当编号为 i 和 j 的两个行块被送至同一处理器时,令编号为 i 的 行块中的每行元素和编号为 j 的行块中的每行元素配对,以消去相应的非主对角元素,这样 在所有的行块都两两配对之后,可以将所有的非主对角元素消去一遍,从而完成一轮计算。 由图 1.1 可以看出,在一轮计算中,处理器之间要 2p-1 次交换行块。为保证不同行块配对 时可以将原矩阵 A 的非主对角元素消去,引入变量 b 记录每个处理器中的行块数据在原矩 阵 A 中的实际行号。在行块交换时,变量 b 也跟着相应的行块在各处理器之间传送。 处理器之间的数据块交换存在如下规律: 0 号处理器前一个行块(简称前数据块,后一个行块简称后数据块)始终保持不变,将后 数据块发送给 1 号处理器,作为 1 号处理器的前数据块。同时接收 1 号处理器发送的后数据 块作为自己的后数据块。 p-1 号处理器首先将后数据块发送给编号为 p-2 的处理器,作为 p-2 号处理器的后数据 块。然后将前数据块移至后数据块的位置上,最后接收 p-2 号处理器发送的前数据块作为自 己的前数据块。 编号为 my_rank 的其余处理器将前数据块发送给编号为 my_rank+1 的处理器,作为 my_rank+1 号处理器的前数据块。将后数据块发送给编号为 my_rank-1 的处理器,作为 my_rank-1 号处理器的后数据块。 为了避免在通信过程中发生死锁,奇数号处理器和偶数号处理器的收发顺序被错开。 使偶数号处理器先发送后接收;而奇数号处理器先将数据保存在缓冲区中,然后接收偶数号 处理器发送的数据,最后再将缓冲区中的数据发送给偶数号处理器。数据块传送的具体过程 描述如下: 算法 21.4 雅可比法求对称矩阵特征值的并行过程中处理器之间的数据块交换算法 输入:矩阵 A 的行数据块和向量 b 的数据块分布于各个处理器中 输出:在处理器阵列中传送后的矩阵 A 的行数据块和向量 b 的数据块 Begin 对所有处理器 my_rank(my_rank=0,…, p-1)同时执行如下的算法: /*矩阵 A 和向量 b 为要传送的数据块*/ (1)if (my-rank=0) then /*0 号处理器*/ (1.1)将后数据块发送给 1 号处理器 (1.2)接收 1 号处理器发送来的后数据块作为自己的后数据块 end if (2)if ((my-rank=p-1) and ( my-rank mod 2 ≠ 0)) then /*处理器 p-1 且其为奇数*/ (2.1)for i=m/2 to m-1 do /* 将后数据块保存在缓冲区 buffer 中*/ for j=0 to n-1 do buffer[i-m/2,j]=a[i,j] end for end for (2.2)for i=m/2 to m-1 do