📜  并行算法-矩阵乘法

📅  最后修改于: 2020-12-13 15:15:42             🧑  作者: Mango


矩阵是一组以固定数量的行和列排列的数字和非数字数据。矩阵乘法是并行计算中的重要乘法设计。在这里,我们将讨论在诸如mesh和hypercube之类的各种通信网络上矩阵乘法的实现。 Mesh和hypercube具有更高的网络连接性,因此与环网等其他网络相比,它们允许更快的算法。

网状网络

一组节点形成p维网格的拓扑称为网状拓扑。在这里,所有边缘都平行于网格轴,并且所有相邻节点之间都可以通信。

节点总数=(行中的节点数)×(列中的节点数)

可以使用以下因素评估网状网络-

  • 直径
  • 分割宽度

直径-在网状网络中,两个节点之间的最长距离是其直径。具有kP个节点的p维网格网络的直径为p(k-1)

二等分宽度-二等分宽度是从网络中删除以将网格网络分为两半所需的最小边数。

使用网状网络的矩阵乘法

我们考虑了具有环绕连接的2D网状网络SIMD模型。我们将设计一种算法,在特定的时间内使用n 2个处理器将两个n×n数组相乘。

矩阵A和B分别具有元素ij和b ij 。处理元素PE ij代表a ij和b ij 。矩阵A和B的排列方式应使每个处理器都有一对要相乘的元素。矩阵A的元素将向左移动,矩阵B的元素将向向上移动。矩阵A和B中元素位置的这些变化为每个处理元素PE提供了一对新的要相乘的值。

算法步骤

  • 错开两个矩阵。
  • 计算所有乘积a ik ×b kj
  • 步骤2完成后计算总和。

算法

Procedure MatrixMulti

Begin
   for k = 1 to n-1
    
   for all Pij; where i and j ranges from 1 to n
      ifi is greater than k then
         rotate a in left direction
      end if
        
   if j is greater than k then
      rotate b in the upward direction
   end if
    
   for all Pij ; where i and j lies between 1 and n
      compute the product of a and b and store it in c
   for k= 1 to n-1 step 1
   for all Pi;j where i and j ranges from 1 to n
      rotate a in left direction
      rotate b in the upward direction
      c=c+aXb
End

超立方体网络

超立方体是一种n维构造,其中边缘彼此垂直且长度相同。 n维超立方体也称为n立方体或n维立方体。

具有2 k节点的Hypercube的功能

  • 直径= k
  • 对等宽度= 2 k–1
  • 边数= k

使用Hypercube网络进行矩阵乘法

Hypercube网络的一般规范-

  • N = 2 m为处理器总数。令处理器为P 0, P 1 …..P N-1

  • 令i和i b为两个整数,0 b

  • 让我们考虑两个n×n矩阵,矩阵A和矩阵B。

  • 步骤1-将矩阵A和矩阵B的元素分配给n 3个处理器,以使位置i,j,k的处理器具有jibik

  • 步骤2-位置(i,j,k)中的所有处理器都将计算乘积

    C(i,j,k)= A(i,j,k)×B(i,j,k)

  • 步骤3-对于0≤i≤n-1,总和C(0,j,k)=ΣC(i,j,k),其中0≤j,k

块矩阵

块矩阵或分区矩阵是一个矩阵,其中每个元素本身代表一个单独的矩阵。这些单独的部分称为子矩阵

块矩阵块矩阵1

在图(a)中,X是块矩阵,其中A,B,C,D是矩阵本身。图(f)显示了总矩阵。

块矩阵乘法

当两个块矩阵是平方矩阵时,它们将按照我们执行简单矩阵乘法的方式相乘。例如,

块矩阵乘法