From e9651e206ef83bb1dd33b507fdea552e2e446d32 Mon Sep 17 00:00:00 2001 From: _ov4 Date: Mon, 9 Nov 2026 11:22:50 +0000 Subject: final macro --- cachelab-handout/trans.c | 21 +++++---------------- cachelab-handout/trans.h | 19 +++++++++++++++++++ 2 files changed, 24 insertions(+), 16 deletions(-) create mode 100644 cachelab-handout/trans.h (limited to 'cachelab-handout') diff --git a/cachelab-handout/trans.c b/cachelab-handout/trans.c index 8f347aa..6972f87 100644 --- a/cachelab-handout/trans.c +++ b/cachelab-handout/trans.c @@ -25,6 +25,7 @@ int is_transpose(int M, int N, int A[N][M], int B[M][N]); #define CASE_64_64_BLOCK_SIZE 4 #define CASE_64_64_MAGIC_NUMBER 2 +#include "trans.h" #include "trans_64.h" #include "trans_32.h" @@ -133,15 +134,9 @@ void transpose_submit(int M, int N, int A[N][M], int B[M][N]) j2 = 4, t4 = 0; for (i2 = 0; i2 < CASE_64_64_BLOCK_SIZE; i2++) { - t0 = B[j * CASE_64_64_MAGIC_NUMBER * CASE_64_64_BLOCK_SIZE + t4 + i2] - [i * CASE_64_64_MAGIC_NUMBER * CASE_64_64_BLOCK_SIZE + j2 + 0]; - t1 = B[j * CASE_64_64_MAGIC_NUMBER * CASE_64_64_BLOCK_SIZE + t4 + i2] - [i * CASE_64_64_MAGIC_NUMBER * CASE_64_64_BLOCK_SIZE + j2 + 1]; - t2 = B[j * CASE_64_64_MAGIC_NUMBER * CASE_64_64_BLOCK_SIZE + t4 + i2] - [i * CASE_64_64_MAGIC_NUMBER * CASE_64_64_BLOCK_SIZE + j2 + 2]; - t3 = B[j * CASE_64_64_MAGIC_NUMBER * CASE_64_64_BLOCK_SIZE + t4 + i2] - [i * CASE_64_64_MAGIC_NUMBER * CASE_64_64_BLOCK_SIZE + j2 + 3]; + LOAD_ROW_4(B, j*8 + 0*4 + i2, i*8 + 1*4); + B[j * CASE_64_64_MAGIC_NUMBER * CASE_64_64_BLOCK_SIZE + t4 + i2] [i * CASE_64_64_MAGIC_NUMBER * CASE_64_64_BLOCK_SIZE + j2 + 0] = A[i * CASE_64_64_MAGIC_NUMBER * CASE_64_64_BLOCK_SIZE + j2 + 0] @@ -162,14 +157,8 @@ void transpose_submit(int M, int N, int A[N][M], int B[M][N]) A[i * CASE_64_64_MAGIC_NUMBER * CASE_64_64_BLOCK_SIZE + j2 + 3] [j * CASE_64_64_MAGIC_NUMBER * CASE_64_64_BLOCK_SIZE + t4 + i2]; - B[j * CASE_64_64_MAGIC_NUMBER * CASE_64_64_BLOCK_SIZE + j2 + i2] - [i * CASE_64_64_MAGIC_NUMBER * CASE_64_64_BLOCK_SIZE + t4 + 0] = t0; - B[j * CASE_64_64_MAGIC_NUMBER * CASE_64_64_BLOCK_SIZE + j2 + i2] - [i * CASE_64_64_MAGIC_NUMBER * CASE_64_64_BLOCK_SIZE + t4 + 1] = t1; - B[j * CASE_64_64_MAGIC_NUMBER * CASE_64_64_BLOCK_SIZE + j2 + i2] - [i * CASE_64_64_MAGIC_NUMBER * CASE_64_64_BLOCK_SIZE + t4 + 2] = t2; - B[j * CASE_64_64_MAGIC_NUMBER * CASE_64_64_BLOCK_SIZE + j2 + i2] - [i * CASE_64_64_MAGIC_NUMBER * CASE_64_64_BLOCK_SIZE + t4 + 3] = t3; + + STORE_ROW_4(B, j*8 + 1*4 + i2, i*8 + 0*4); } // A11 -> B11 diff --git a/cachelab-handout/trans.h b/cachelab-handout/trans.h new file mode 100644 index 0000000..1e1add0 --- /dev/null +++ b/cachelab-handout/trans.h @@ -0,0 +1,19 @@ +#pragma once + +#define LOAD_ROW_4(src, base_i, base_j) \ +do \ +{ \ +t0 = src[base_i][base_j + 0]; \ +t1 = src[base_i][base_j + 1]; \ +t2 = src[base_i][base_j + 2]; \ +t3 = src[base_i][base_j + 3]; \ +} while (0) + +#define STORE_ROW_4(dst, base_i, base_j) \ +do \ +{ \ +dst[base_i][base_j + 0] = t0; \ +dst[base_i][base_j + 1] = t1; \ +dst[base_i][base_j + 2] = t2; \ +dst[base_i][base_j + 3] = t3; \ +} while (0) -- cgit v1.3.1-4-g156e