CS255
Chris Pollett
Feb 16, 2022
MAT-VEC(A, x) 1 n = A.rows 2 let y be a new vector of length n 3 parallel for i = 1 to n: 4 y[i] = 0 5 parallel for i = 1 to n: 6 for j = 1 to n: 7 y[i] = y[i] + a[i][j] * x[j] 8 return y
MAT-VEC-MAIN-LOOP (A, x, y, n, i, i') 1 if i == i': 2 for j = 1 to n 3 y[i] = y[i] + a[i][j] * x[j] 4 else: mid = floor((i+ i')/2) 5 spawn MAT-VEC-MAIN-LOOP(A, x, y, n, i, mid) 6 MAT-VEC-MAIN-LOOP(A, x, y, n, mid + 1, i') 7 sync
RACE-EXAMPLE 1 x = 0 2 parallel for i = 1 to 2 3 x = x + 1 4 print xAfter line 1 two parallel strands try to increment x in line 3, and print x in line 4.
MAT-VEC-WRONG(A, x) 1 n = A.rows 2 let y be a new vector of length n 3 parallel for i = 1 to n 4 y[i] = 0 5 parallel for i = 1 to n 6 parallel for j = 1 to n 7 y[i] = y[i] + a[i][j] * x[j] 8 return y
P-SQUARE-MATRIX-MULTIPLY(A, B) 1 n = A.rows 2 let C be a new n x n matrix 3 parallel for i = 1 to n 4 parallel for j = 1 to n 5 c[i][j] = 0 6 for k = 1 to n 7 c[i][j] = c[i][j] + a[i][k] * b[k][j] 8 return C