Programming Practice

假設 A、B、Cn´n 的方陣 (square matrix),n=rb, b 為塊狀大小 (block size), r 為方塊個數。使用塊狀矩陣乘法 (blocked matrix multiplication) 計算 C=A´B,即是

寫一個C語言的程式以執行以下的步驟:

  1. 宣告 ABC、C1 為 100´100 的二維陣列,

  2. 輸入 n b 兩個正整數,n 為方陣的大小,b 為塊狀大小,且 bn 的因數。

  3. 使用副程式 rand() 隨機產生矩陣 A B 元素的值 (假設AB 元素的值在 1 和 100 之間),

  4. 使用塊狀矩陣演算法計算矩陣 C 元素的值,C=A×B,

  5. 使用一般矩陣演算法計算矩陣 C1 元素的值,C1=A×B,

  6. 輸出矩陣 AB、和 C,

  7. 檢查矩陣 CC1 的結果是否相同。

將塊狀矩陣乘法寫成副程式 void matrix_product_blocked(int n, int b, int A[100][100], int B[100][100], int C[100][100]). 以下為程式執行範例:

Enter matrix size n: 9
Enter block size b (b is a factor of n): 3

Matrix A:
41 40 14 27 83 91 17 76 67
76 61 78 21  0 36 57 84 90
55 10 62 51 55 52 40 31 45
35 59 99 66 84 60 61 27  3
57  6 94  7 22 43 11 22 29
72 20  2  2 12 42 25 72 27
82 37 54 27  4  1 99 67 31
35 26 11 11 88 34  3 70 31
95  8 40 66 52 41 39 71 67

Matrix B:
80 18 36 36 27 67 97 33  2
68 62 51 57 38 59 50 93 60
93 42 26 30 36 37 82 63 28
41 15 62 59 99 13 53 25 81
86  5 39 48 36 96 10  7 14
20 13 18 40 49 90 23 14 34
17 73 37 84 63  8 10 30 76
23 45 28 69 58 23 16  4  0
28 76 31 62  6 78 61 42 12

Matrix C:
21280 15562 15263 24219 19132 29244 16952 12113 11413
24484 23990 17076 27396 20024 24498 26163 19950 14333
21360 13665 14088 20428 18262 21735 19009 12253 12695
28891 16532 18397 25092 24676 25154 21406 18021 19616
18254 10117  8790 12643 10886 16580 17348 10928  6627
12097 10373  8790 14908 11377 14998 12389  7256  5382
19661 19074 14591 23367 18739 15251 19679 14806 14069
16819  9476 10630 16309 12687 19989 10883  7305  5817
24034 16803 17234 25435 21701 25028 23469 13255 13026

**** The result of blocked matrix multiplication is correct.