| 4 | int Ti = 3; |
| 5 | #define min(a,b) ((a)<(b)?(a):(b)) |
| 6 | void func_unroll4(float* A, float* B, int NI, int NJ) { |
| 7 | for (int ii = 0; ii < NI; ii += Ti) { |
| 8 | for (int j = 0; j < NJ; j += 4) {//第二层循环展开四次 |
| 9 | for (int i = ii; i < min(ii + Ti, NI); ++i) {//连加四次以后再将数据存储到A[i] |
| 10 | A[i] += B[j * NI + i]; |
| 11 | A[i] += B[(j + 1) * NI + i]; |
| 12 | A[i] += B[(j + 2) * NI + i]; |
| 13 | A[i] += B[(j + 3) * NI + i]; |
| 14 | } |
| 15 | } |
| 16 | } |
| 17 | } |
| 18 | int main(){ |
| 19 | float* A, * B; |
| 20 | int i,na=6, nb=12; |