C a n n o n Cannon Cannon算法:
输入:两个 N ∗ N N*N N∗N的矩阵 A 、 B A、B A、B, P P P个处理器。
输出:若 P P P是完全平方数且 N % P = 0 N\%\sqrt P=0 N%P=0,则计算 C = A ∗ B C=A*B C=A∗B并输出。
算法思想:将 N ∗ N N*N N∗N的矩阵分割成 P P P块,即每行每列均有 P \sqrt P P个分块矩阵,那么每个分块的行列都等于 N / P N/\sqrt P N/P。将这些分块分给 P P P个处理器,即处理器 P i j P_{ij} Pij管理分块 A i j 、 B i j A_{ij}、B_{ij} Aij、Bij,并计算对应分块 C i j C_{ij} Cij的结果。初始时将分块 A i j A_{ij} Aij循环左移 i i i步,分块 B i j B_{ij} Bij循环上移 j j j步。接下来是运算过程,计算 A i j ∗ B i j A_{ij}*B_{ij} Aij∗Bij并将结果放置到 C i j C_{ij} Cij中,计算完成后 A i j A_{ij} Aij循环左移一步, B i j B_{ij} Bij循环上移一步,重复这个过程 P \sqrt P P