From 5504dc40b2eef76d62e83cb736ea8759c4deed43 Mon Sep 17 00:00:00 2001 From: Thilina Ratnayaka Date: Tue, 26 Sep 2023 19:44:23 -0500 Subject: [PATCH 1/2] Refactor test nomp-api-200 --- tests/nomp-api-200-impl.h | 30 +++++++++++++++--------------- tests/nomp-api-200.c | 24 ++++++++++++------------ 2 files changed, 27 insertions(+), 27 deletions(-) diff --git a/tests/nomp-api-200-impl.h b/tests/nomp-api-200-impl.h index 9fa872d6..5a54d7c7 100644 --- a/tests/nomp-api-200-impl.h +++ b/tests/nomp-api-200-impl.h @@ -80,8 +80,8 @@ static int nomp_api_200_sub(unsigned n) { } #undef nomp_api_200_sub -#define nomp_api_200_mul_sum TOKEN_PASTE(nomp_api_200_mul_sum, TEST_SUFFIX) -static int nomp_api_200_mul_sum(unsigned n) { +#define nomp_api_200_mul1 TOKEN_PASTE(nomp_api_200_mul1, TEST_SUFFIX) +static int nomp_api_200_mul1(unsigned n) { nomp_test_assert(n <= TEST_MAX_SIZE); TEST_TYPE a[TEST_MAX_SIZE], b[TEST_MAX_SIZE]; @@ -91,24 +91,24 @@ static int nomp_api_200_mul_sum(unsigned n) { const char *knl_fmt = "void foo(%s *a, %s *b, int N) { \n" " for (int i = 0; i < N; i++) \n" - " a[i] *= b[i] + 1; \n" + " a[i] = a[i] * b[i]; \n" "} \n"; nomp_api_200_aux(knl_fmt, a, b, n); #if defined(TEST_TOL) for (unsigned i = 0; i < n; i++) - nomp_test_assert(fabs(a[i] - (n - i) * (i + 1)) < TEST_TOL); + nomp_test_assert(fabs(a[i] - (n - i) * i) < TEST_TOL); #else for (unsigned i = 0; i < n; i++) - nomp_test_assert(a[i] == (TEST_TYPE)((n - i) * (i + 1))); + nomp_test_assert(a[i] == (TEST_TYPE)((n - i) * i)); #endif return 0; } -#undef nomp_api_200_mul_sum +#undef nomp_api_200_mul1 -#define nomp_api_200_mul TOKEN_PASTE(nomp_api_200_mul, TEST_SUFFIX) -static int nomp_api_200_mul(unsigned n) { +#define nomp_api_200_mul2 TOKEN_PASTE(nomp_api_200_mul2, TEST_SUFFIX) +static int nomp_api_200_mul2(unsigned n) { nomp_test_assert(n <= TEST_MAX_SIZE); TEST_TYPE a[TEST_MAX_SIZE], b[TEST_MAX_SIZE]; @@ -118,21 +118,21 @@ static int nomp_api_200_mul(unsigned n) { const char *knl_fmt = "void foo(%s *a, %s *b, int N) { \n" " for (int i = 0; i < N; i++) \n" - " a[i] = a[i] * b[i]; \n" + " a[i] *= b[i] + 1; \n" "} \n"; nomp_api_200_aux(knl_fmt, a, b, n); #if defined(TEST_TOL) for (unsigned i = 0; i < n; i++) - nomp_test_assert(fabs(a[i] - (n - i) * i) < TEST_TOL); + nomp_test_assert(fabs(a[i] - (n - i) * (i + 1)) < TEST_TOL); #else for (unsigned i = 0; i < n; i++) - nomp_test_assert(a[i] == (TEST_TYPE)((n - i) * i)); + nomp_test_assert(a[i] == (TEST_TYPE)((n - i) * (i + 1))); #endif return 0; } -#undef nomp_api_200_mul +#undef nomp_api_200_mul2 #define nomp_api_200_square TOKEN_PASTE(nomp_api_200_square, TEST_SUFFIX) static int nomp_api_200_square(unsigned n) { @@ -161,8 +161,8 @@ static int nomp_api_200_square(unsigned n) { } #undef nomp_api_200_square -#define nomp_api_200_linear TOKEN_PASTE(nomp_api_200_linear, TEST_SUFFIX) -static int nomp_api_200_linear(unsigned n) { +#define nomp_api_200_saxpy TOKEN_PASTE(nomp_api_200_saxpy, TEST_SUFFIX) +static int nomp_api_200_saxpy(unsigned n) { nomp_test_assert(n <= TEST_MAX_SIZE); TEST_TYPE a[TEST_MAX_SIZE] = {0}, b[TEST_MAX_SIZE] = {1, 2, 3, 4, 5}; @@ -184,5 +184,5 @@ static int nomp_api_200_linear(unsigned n) { return 0; } -#undef nomp_api_200_linear +#undef nomp_api_200_saxpy #undef nomp_api_200_aux diff --git a/tests/nomp-api-200.c b/tests/nomp-api-200.c index 3984c662..95d3bb53 100644 --- a/tests/nomp-api-200.c +++ b/tests/nomp-api-200.c @@ -18,17 +18,17 @@ static int test_vector_subtraction(void) { return err; } -static int test_vector_multiplication_sum(void) { +static int test_vector_multiplication1(void) { int err = 0; - TEST_BUILTIN_TYPES(200_mul_sum, 10) - TEST_BUILTIN_TYPES(200_mul_sum, 50) + TEST_BUILTIN_TYPES(200_mul1, 10) + TEST_BUILTIN_TYPES(200_mul1, 50) return err; } -static int test_vector_multiplication(void) { +static int test_vector_multiplication2(void) { int err = 0; - TEST_BUILTIN_TYPES(200_mul, 10) - TEST_BUILTIN_TYPES(200_mul, 50) + TEST_BUILTIN_TYPES(200_mul2, 10) + TEST_BUILTIN_TYPES(200_mul2, 50) return err; } @@ -39,10 +39,10 @@ static int test_vector_square_sum(void) { return err; } -static int test_vector_linear(void) { +static int test_vector_saxpy(void) { int err = 0; - TEST_BUILTIN_TYPES(200_linear, 10) - TEST_BUILTIN_TYPES(200_linear, 50) + TEST_BUILTIN_TYPES(200_saxpy, 10) + TEST_BUILTIN_TYPES(200_saxpy, 50) return err; } @@ -52,10 +52,10 @@ int main(int argc, const char *argv[]) { err |= SUBTEST(test_vector_addition); err |= SUBTEST(test_vector_subtraction); - err |= SUBTEST(test_vector_multiplication_sum); - err |= SUBTEST(test_vector_multiplication); + err |= SUBTEST(test_vector_multiplication1); + err |= SUBTEST(test_vector_multiplication2); err |= SUBTEST(test_vector_square_sum); - err |= SUBTEST(test_vector_linear); + err |= SUBTEST(test_vector_saxpy); err |= nomp_finalize(); nomp_test_check(err); From 8c78d2b2ec2d0010ef8a93322007e048c08fc851 Mon Sep 17 00:00:00 2001 From: Thilina Ratnayaka Date: Tue, 26 Sep 2023 20:29:50 -0500 Subject: [PATCH 2/2] Add a test with unsigned loop bounds --- tests/nomp-api-200-impl.h | 52 +++++++++++++++++++++++++++++++++++++++ tests/nomp-api-200.c | 8 ++++++ 2 files changed, 60 insertions(+) diff --git a/tests/nomp-api-200-impl.h b/tests/nomp-api-200-impl.h index 5a54d7c7..7cef95e4 100644 --- a/tests/nomp-api-200-impl.h +++ b/tests/nomp-api-200-impl.h @@ -52,6 +52,58 @@ static int nomp_api_200_add(unsigned n) { } #undef nomp_api_200_add +#define nomp_api_200_ui_aux TOKEN_PASTE(nomp_api_200_ui_aux, TEST_SUFFIX) +static int nomp_api_200_ui_aux(const char *fmt, TEST_TYPE *a, TEST_TYPE *b, + unsigned n) { + nomp_test_check(nomp_update(a, 0, n, sizeof(TEST_TYPE), NOMP_TO)); + nomp_test_check(nomp_update(b, 0, n, sizeof(TEST_TYPE), NOMP_TO)); + + int id = -1; + const char *clauses[4] = {"transform", "nomp_api_100", "tile", 0}; + char *knl = generate_knl(fmt, 2, TOSTRING(TEST_TYPE), TOSTRING(TEST_TYPE)); + nomp_test_check(nomp_jit(&id, knl, clauses, 3, "a", sizeof(TEST_TYPE), + NOMP_PTR, "b", sizeof(TEST_TYPE), NOMP_PTR, "N", + sizeof(unsigned), NOMP_UINT)); + nomp_free(&knl); + + nomp_test_check(nomp_run(id, a, b, &n)); + + nomp_test_check(nomp_sync()); + + nomp_test_check(nomp_update(a, 0, n, sizeof(TEST_TYPE), NOMP_FROM)); + nomp_test_check(nomp_update(a, 0, n, sizeof(TEST_TYPE), NOMP_FREE)); + nomp_test_check(nomp_update(b, 0, n, sizeof(TEST_TYPE), NOMP_FREE)); + + return 0; +} + +#define nomp_api_200_add_ui TOKEN_PASTE(nomp_api_200_add_ui, TEST_SUFFIX) +static int nomp_api_200_add_ui(unsigned n) { + nomp_test_assert(n <= TEST_MAX_SIZE); + + TEST_TYPE a[TEST_MAX_SIZE], b[TEST_MAX_SIZE]; + for (unsigned i = 0; i < n; i++) + a[i] = n - i, b[i] = i; + + const char *knl_fmt = + "void foo(%s *a, %s *b, unsigned N) { \n" + " for (int i = 0; i < N; i++) \n" + " a[i] += b[i]; \n" + "} \n"; + nomp_api_200_ui_aux(knl_fmt, a, b, n); + +#if defined(TEST_TOL) + for (unsigned i = 0; i < n; i++) + nomp_test_assert(fabs(a[i] - n) < TEST_TOL); +#else + for (unsigned i = 0; i < n; i++) + nomp_test_assert(a[i] == (TEST_TYPE)n); +#endif + + return 0; +} +#undef nomp_api_200_add_ui + #define nomp_api_200_sub TOKEN_PASTE(nomp_api_200_sub, TEST_SUFFIX) static int nomp_api_200_sub(unsigned n) { nomp_test_assert(n <= TEST_MAX_SIZE && n > 0); diff --git a/tests/nomp-api-200.c b/tests/nomp-api-200.c index 95d3bb53..e93f9bfb 100644 --- a/tests/nomp-api-200.c +++ b/tests/nomp-api-200.c @@ -11,6 +11,13 @@ static int test_vector_addition(void) { return err; } +static int test_vector_addition_ui(void) { + int err = 0; + TEST_BUILTIN_TYPES(200_add_ui, 10) + TEST_BUILTIN_TYPES(200_add_ui, 50) + return err; +} + static int test_vector_subtraction(void) { int err = 0; TEST_BUILTIN_TYPES(200_sub, 10) @@ -51,6 +58,7 @@ int main(int argc, const char *argv[]) { nomp_test_check(err); err |= SUBTEST(test_vector_addition); + err |= SUBTEST(test_vector_addition_ui); err |= SUBTEST(test_vector_subtraction); err |= SUBTEST(test_vector_multiplication1); err |= SUBTEST(test_vector_multiplication2);