LU 分解,给出采用行连续划分方式下的 MPI 实现
㈠实验并行算法描述:
⑴首先从 中读取矩阵数据,读取工作由进程 完成,然后是数据的
分发。文件中的头两个元素是矩阵的行列 ,,它们必须相等,否则输入错
误。为 开辟一个 个 大小的内存空间,并将文件中的矩阵数据
发给它。
⑵ 号处理器将 广播给所有处理器。通信域中的处理器数为 则分配至各处
理器的子矩阵大小为 其中 开辟一个 大小的内存
存放子矩阵,再开辟 大小内存 作为各处理器为主行元素建立发
送和接受缓冲区。 号处理器再为 和 矩阵分配内存。
⑶ 号处理器采用连续划分将矩阵 划分为大小 的 块子矩阵,依次发
送给 至 号处理器
⑷对矩阵进行 分解,外层循环 代表处理器号,内存循环 是每个处理器中
子矩阵的行数。若当前处理的主行在本处理器, !是当前处理的主行
号,将主行元素都存到数组 向其他所有处理器广播主行元素;若当前处理的
主 行 不 在 本 处 理 器 , 则 接 收 主 行 所 在 处 理 器 广 播 来 的 主 元 素 。 若
"#$% , 利 用 主 行 元 素 对 其 ! 至 行 数 据 作 行 变 换 , 若
"#$%&利用主行元素对其 至 行数据作行变换。
⑸ 号处理器从其余各进程中接收子矩阵 ,得到经过变换的矩阵 , 就是其
下三角矩阵, 就是其上三角矩阵。
㈡程序源代码:
'()*+*
'()*,+*
'()*+*
'-)."/)0!"1
为 矩阵
'-)."/)0!"1
'-)."/)0!"1
'-)."/)0!"1
'-))./
'-))./
)2
)2
)2
)"#$%2
)2
3#4)2