Cannon’s Algorithm
Skew A, Skew B, Multiply, Accumulate, Rotate
for i := 2 to m do-- Skew A
[right of Lop] wrap A; -- Move col 1 to border
[i..m, 1..n] A := A@right; -- Shift last i rows left
for i := 2 to p do-- Skew B
[below of Rop] wrap B; -- Move 1st row below last
[1..n, i..p] B := B@below; -- Shift last i cols up
[Res] C := 0.0; -- Initialize C
for i := 1 to n do-- For A&B's common dimension
[Res] C := C + A*B ;-- Form product and accumulate
[right of Lop] wrap A; -- Send first col right
[Lop] A := A@right; -- Shift array left
[below of Rop] wrap B; -- Send top row down
[Rop] B := B@below; -- Shift array up