并行矩阵乘法算法详解
1. 引言
矩阵计算在大多数科学计算问题中处于核心地位,而矩阵乘法是其中最基本的计算之一。为了高效地进行矩阵乘法,我们将介绍四种不同的算法,其中两种使用共享变量,适用于共享内存多处理器;另外两种使用消息传递,适用于分布式内存系统。
2. 并行计算的关键考量——粒度大小
在异步多处理器上高效执行并行程序时,每个进程执行的工作量相对于创建进程的时间以及与其他进程通信和同步的时间要足够大。通常用并行计算的基本步骤(粒度)来描述进程执行的顺序工作量。选择合适的粒度大小是并行计算中普遍且重要的问题,因为粒度大小决定了每个进程的顺序执行时间,该时间必须远大于并发和通信开销。
3. 预调度条带算法
- 算法原理 :使用 $N × N$ 的实矩阵 $A$、$B$ 和 $C$,假设它们是共享变量,使用 $PR$ 个进程来计算 $A$ 和 $B$ 的乘积并存储在 $C$ 中。为了平衡每个进程的计算量,假设 $N$ 是 $PR$ 的倍数,令 $S = N/PR$,第一个进程计算 $C$ 的前 $S$ 行的值,第二个进程计算接下来的 $S$ 行的值,依此类推。这种方法有时被称为预调度,因为每个进程预先被分配了一定数量的“任务”(即这里的内积)。
- 实现步骤 :
- 主类从输入文件或命令行读取 $N$、$PR$、$A$ 和 $B$ 的值,创建一个乘法器对象,调用其
compute方法进行实际计算,并输出结果。 - 乘法器类声明 $N$、$PR$、$
- 主类从输入文件或命令行读取 $N$、$PR$、$A$ 和 $B$ 的值,创建一个乘法器对象,调用其
超级会员免费看
订阅专栏 解锁全文
2790

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



