From b1802f4dc8c1634dc3fc2c6ef7684b1b7bd25f1c Mon Sep 17 00:00:00 2001 From: Chip Kerchner Date: Fri, 16 Aug 2024 09:51:37 -0500 Subject: [PATCH 1/4] Fix unit test to start at 1 instead of 0 - since malloc zero bytes fails on some systems. --- test/compare_sgemm_sbgemm.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/compare_sgemm_sbgemm.c b/test/compare_sgemm_sbgemm.c index cd508a0cf..9209a6103 100644 --- a/test/compare_sgemm_sbgemm.c +++ b/test/compare_sgemm_sbgemm.c @@ -96,7 +96,7 @@ main (int argc, char *argv[]) char transA = 'N', transB = 'N'; float alpha = 1.0, beta = 0.0; - for (x = 0; x <= loop; x++) + for (x = 1; x <= loop; x++) { if ((x > 100) && (x != SBGEMM_LARGEST)) continue; m = k = n = x; From 868aa857bc3b32576e1ef1abd8501504339099c6 Mon Sep 17 00:00:00 2001 From: Chip Kerchner Date: Fri, 16 Aug 2024 10:28:10 -0500 Subject: [PATCH 2/4] Change malloc zero to return one byte and update the SBGEMM test to again use sizes of zero. --- test/compare_sgemm_sbgemm.c | 40 ++++++++++++++++++++++--------------- 1 file changed, 24 insertions(+), 16 deletions(-) diff --git a/test/compare_sgemm_sbgemm.c b/test/compare_sgemm_sbgemm.c index 9209a6103..7ea71b63d 100644 --- a/test/compare_sgemm_sbgemm.c +++ b/test/compare_sgemm_sbgemm.c @@ -85,6 +85,14 @@ float16to32 (bfloat16_bits f16) #define SBGEMM_LARGEST 256 +void *malloc_safe(size_t size) +{ + if (size == 0) + return malloc(1); + else + return malloc(size); +} + int main (int argc, char *argv[]) { @@ -96,17 +104,17 @@ main (int argc, char *argv[]) char transA = 'N', transB = 'N'; float alpha = 1.0, beta = 0.0; - for (x = 1; x <= loop; x++) + for (x = 0; x <= loop; x++) { if ((x > 100) && (x != SBGEMM_LARGEST)) continue; m = k = n = x; - float *A = (float *)malloc(m * k * sizeof(FLOAT)); - float *B = (float *)malloc(k * n * sizeof(FLOAT)); - float *C = (float *)malloc(m * n * sizeof(FLOAT)); - bfloat16_bits *AA = (bfloat16_bits *)malloc(m * k * sizeof(bfloat16_bits)); - bfloat16_bits *BB = (bfloat16_bits *)malloc(k * n * sizeof(bfloat16_bits)); - float *DD = (float *)malloc(m * n * sizeof(FLOAT)); - float *CC = (float *)malloc(m * n * sizeof(FLOAT)); + float *A = (float *)malloc_safe(m * k * sizeof(FLOAT)); + float *B = (float *)malloc_safe(k * n * sizeof(FLOAT)); + float *C = (float *)malloc_safe(m * n * sizeof(FLOAT)); + bfloat16_bits *AA = (bfloat16_bits *)malloc_safe(m * k * sizeof(bfloat16_bits)); + bfloat16_bits *BB = (bfloat16_bits *)malloc_safe(k * n * sizeof(bfloat16_bits)); + float *DD = (float *)malloc_safe(m * n * sizeof(FLOAT)); + float *CC = (float *)malloc_safe(m * n * sizeof(FLOAT)); if ((A == NULL) || (B == NULL) || (C == NULL) || (AA == NULL) || (BB == NULL) || (DD == NULL) || (CC == NULL)) return 1; @@ -195,15 +203,15 @@ main (int argc, char *argv[]) } k = 1; - for (x = 1; x <= loop; x++) + for (x = 0; x <= loop; x++) { - float *A = (float *)malloc(x * x * sizeof(FLOAT)); - float *B = (float *)malloc(x * sizeof(FLOAT)); - float *C = (float *)malloc(x * sizeof(FLOAT)); - bfloat16_bits *AA = (bfloat16_bits *)malloc(x * x * sizeof(bfloat16_bits)); - bfloat16_bits *BB = (bfloat16_bits *)malloc(x * sizeof(bfloat16_bits)); - float *DD = (float *)malloc(x * sizeof(FLOAT)); - float *CC = (float *)malloc(x * sizeof(FLOAT)); + float *A = (float *)malloc_safe(x * x * sizeof(FLOAT)); + float *B = (float *)malloc_safe(x * sizeof(FLOAT)); + float *C = (float *)malloc_safe(x * sizeof(FLOAT)); + bfloat16_bits *AA = (bfloat16_bits *)malloc_safe(x * x * sizeof(bfloat16_bits)); + bfloat16_bits *BB = (bfloat16_bits *)malloc_safe(x * sizeof(bfloat16_bits)); + float *DD = (float *)malloc_safe(x * sizeof(FLOAT)); + float *CC = (float *)malloc_safe(x * sizeof(FLOAT)); if ((A == NULL) || (B == NULL) || (C == NULL) || (AA == NULL) || (BB == NULL) || (DD == NULL) || (CC == NULL)) return 1; From 77f85c7c00c3abbdd0fffc463fc1ec01dc198d88 Mon Sep 17 00:00:00 2001 From: Chip Kerchner Date: Fri, 16 Aug 2024 11:15:32 -0500 Subject: [PATCH 3/4] GEMV tests don't like zero elements. --- test/compare_sgemm_sbgemm.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/compare_sgemm_sbgemm.c b/test/compare_sgemm_sbgemm.c index 7ea71b63d..eb47e83e5 100644 --- a/test/compare_sgemm_sbgemm.c +++ b/test/compare_sgemm_sbgemm.c @@ -203,7 +203,7 @@ main (int argc, char *argv[]) } k = 1; - for (x = 0; x <= loop; x++) + for (x = 1; x <= loop; x++) { float *A = (float *)malloc_safe(x * x * sizeof(FLOAT)); float *B = (float *)malloc_safe(x * sizeof(FLOAT)); From 89702e1f4a8fbaf8f24f661eb6cca9f7f0e96a40 Mon Sep 17 00:00:00 2001 From: Chip Kerchner Date: Fri, 16 Aug 2024 11:37:39 -0500 Subject: [PATCH 4/4] Fix zero element GEMV test. --- test/compare_sgemm_sbgemm.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/compare_sgemm_sbgemm.c b/test/compare_sgemm_sbgemm.c index eb47e83e5..b8aaee8be 100644 --- a/test/compare_sgemm_sbgemm.c +++ b/test/compare_sgemm_sbgemm.c @@ -202,9 +202,9 @@ main (int argc, char *argv[]) return ret; } - k = 1; for (x = 1; x <= loop; x++) { + k = (x == 0) ? 0 : 1; float *A = (float *)malloc_safe(x * x * sizeof(FLOAT)); float *B = (float *)malloc_safe(x * sizeof(FLOAT)); float *C = (float *)malloc_safe(x * sizeof(FLOAT));