Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
82 changes: 67 additions & 15 deletions tests/nomp-api-200-impl.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -80,8 +132,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];
Expand All @@ -91,24 +143,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];
Expand All @@ -118,21 +170,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) {
Expand Down Expand Up @@ -161,8 +213,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};
Expand All @@ -184,5 +236,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
32 changes: 20 additions & 12 deletions tests/nomp-api-200.c
Original file line number Diff line number Diff line change
Expand Up @@ -11,24 +11,31 @@ 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)
TEST_BUILTIN_TYPES(200_sub, 50)
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;
}

Expand All @@ -39,10 +46,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;
}

Expand All @@ -51,11 +58,12 @@ 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_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);
Expand Down