diff options
author | Jan Vesely <jan.vesely@rutgers.edu> | 2017-09-18 16:36:58 -0400 |
---|---|---|
committer | Jan Vesely <jan.vesely@rutgers.edu> | 2017-09-27 10:43:03 -0400 |
commit | e1f66fb2fb8ad781ca755831983b6662c4c440d4 (patch) | |
tree | 8a66a10934c224e63e5132b07f385d1b732dd625 | |
parent | c3e0585feab5629a565273604043116bb8caf1a2 (diff) |
cl: Add tests for 64 bit integer atomics
v2: Fix xor local test
Signed-off-by: Jan Vesely <jan.vesely@rutgers.edu>
33 files changed, 2211 insertions, 0 deletions
diff --git a/tests/cl/program/execute/builtin/atomic/atomic_int64_add-global-return.cl b/tests/cl/program/execute/builtin/atomic/atomic_int64_add-global-return.cl new file mode 100644 index 000000000..5b5d82de2 --- /dev/null +++ b/tests/cl/program/execute/builtin/atomic/atomic_int64_add-global-return.cl @@ -0,0 +1,63 @@ +/*! +[config] +name: atom_int64_add global, with usage of return variable +clc_version_min: 10 +require_device_extensions: cl_khr_int64_base_atomics + +[test] +name: simple long +kernel_name: simple_long +dimensions: 1 +global_size: 1 0 0 +local_size: 1 0 0 +arg_out: 0 buffer long[2] -4 -5 +arg_in: 0 buffer long[2] -5 0 + +[test] +name: simple ulong +kernel_name: simple_ulong +dimensions: 1 +global_size: 1 0 0 +local_size: 1 0 0 +arg_out: 0 buffer ulong[2] 1 0 +arg_in: 0 buffer ulong[2] 0 0 + +[test] +name: threads long +kernel_name: threads_long +dimensions: 1 +global_size: 8 0 0 +local_size: 8 0 0 +arg_out: 0 buffer long[18] 28 0 1 1 3 2 5 3 7 4 9 5 11 6 13 7 15 8 +arg_in: 0 buffer long[18] 0 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 + +[test] +name: threads ulong +kernel_name: threads_ulong +dimensions: 1 +global_size: 8 0 0 +local_size: 8 0 0 +arg_out: 0 buffer ulong[18] 28 0 1 1 3 2 5 3 7 4 9 5 11 6 13 7 15 8 +arg_in: 0 buffer ulong[18] 0 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 + +!*/ + +#define SIMPLE_TEST(TYPE) \ +kernel void simple_##TYPE(global TYPE *mem) { \ + mem[1] = atom_add(mem, 1); \ +} + +#define THREADS_TEST(TYPE) \ +kernel void threads_##TYPE(global TYPE *mem) { \ + TYPE mul = mem[1]; \ + TYPE id = get_global_id(0); \ + TYPE ret = atom_add(mem, id); \ + TYPE ret2 = atom_add(&mem[(id+1)*2], id+ret*mul); \ + mem[(id+1)*2+1] = ret2; \ +} + +SIMPLE_TEST(long) +SIMPLE_TEST(ulong) + +THREADS_TEST(long) +THREADS_TEST(ulong) diff --git a/tests/cl/program/execute/builtin/atomic/atomic_int64_add-global.cl b/tests/cl/program/execute/builtin/atomic/atomic_int64_add-global.cl new file mode 100644 index 000000000..9bbbbf393 --- /dev/null +++ b/tests/cl/program/execute/builtin/atomic/atomic_int64_add-global.cl @@ -0,0 +1,60 @@ +/*! +[config] +name: atom_int64_add global, no usage of return variable +clc_version_min: 10 +require_device_extensions: cl_khr_int64_base_atomics + +[test] +name: simple long +kernel_name: simple_long +dimensions: 1 +global_size: 1 0 0 +local_size: 1 0 0 +arg_out: 0 buffer long[1] -4 +arg_in: 0 buffer long[1] -5 + +[test] +name: simple ulong +kernel_name: simple_ulong +dimensions: 1 +global_size: 1 0 0 +local_size: 1 0 0 +arg_out: 0 buffer ulong[1] 1 +arg_in: 0 buffer ulong[1] 0 + +[test] +name: threads long +kernel_name: threads_long +dimensions: 1 +global_size: 8 0 0 +local_size: 8 0 0 +arg_out: 0 buffer long[1] 28 +arg_in: 0 buffer long[1] 0 + +[test] +name: threads ulong +kernel_name: threads_ulong +dimensions: 1 +global_size: 8 0 0 +local_size: 8 0 0 +arg_out: 0 buffer ulong[1] 28 +arg_in: 0 buffer ulong[1] 0 + +!*/ + +#define SIMPLE_TEST(TYPE) \ +kernel void simple_##TYPE(global TYPE *mem) { \ + atom_add(mem, 1); \ +} + +#define THREADS_TEST(TYPE) \ +kernel void threads_##TYPE(global TYPE *mem) { \ + TYPE id = get_global_id(0); \ + atom_add(mem, id); \ +} + +SIMPLE_TEST(long) +SIMPLE_TEST(ulong) + +THREADS_TEST(long) +THREADS_TEST(ulong) diff --git a/tests/cl/program/execute/builtin/atomic/atomic_int64_add-local.cl b/tests/cl/program/execute/builtin/atomic/atomic_int64_add-local.cl new file mode 100644 index 000000000..da9908a7d --- /dev/null +++ b/tests/cl/program/execute/builtin/atomic/atomic_int64_add-local.cl @@ -0,0 +1,71 @@ +/*! +[config] +name: atom_int64_add local +clc_version_min: 10 +require_device_extensions: cl_khr_int64_base_atomics + +[test] +name: simple long +kernel_name: simple_long +dimensions: 1 +global_size: 1 0 0 +local_size: 1 0 0 +arg_out: 0 buffer long[2] -4 1 +arg_in: 1 buffer long[1] NULL +arg_in: 2 long -4 +arg_in: 3 long 5 + +[test] +name: simple ulong +kernel_name: simple_ulong +dimensions: 1 +global_size: 1 0 0 +local_size: 1 0 0 +arg_out: 0 buffer ulong[2] 4 9 +arg_in: 1 buffer ulong[1] NULL +arg_in: 2 ulong 4 +arg_in: 3 ulong 5 + +[test] +name: threads long +kernel_name: threads_long +dimensions: 1 +global_size: 8 0 0 +local_size: 8 0 0 +arg_out: 0 buffer long[1] 28 +arg_in: 1 buffer long[1] NULL + +[test] +name: threads ulong +kernel_name: threads_ulong +dimensions: 1 +global_size: 8 0 0 +local_size: 8 0 0 +arg_out: 0 buffer ulong[1] 28 +arg_in: 1 buffer ulong[1] NULL + +!*/ + +#define SIMPLE_TEST(TYPE) \ +kernel void simple_##TYPE(global TYPE *out, local TYPE *mem, TYPE initial, TYPE value) { \ + *mem = initial; \ + TYPE a = atom_add(mem, value); \ + out[0] = a; \ + out[1] = *mem; \ +} + +#define THREADS_TEST(TYPE) \ +kernel void threads_##TYPE(global TYPE *out, local TYPE *mem) { \ + *mem = 0; \ + barrier(CLK_LOCAL_MEM_FENCE); \ + TYPE id = get_local_id(0); \ + atom_add(mem, id); \ + barrier(CLK_LOCAL_MEM_FENCE); \ + *out = *mem; \ +} + +SIMPLE_TEST(long) +SIMPLE_TEST(ulong) + +THREADS_TEST(long) +THREADS_TEST(ulong) diff --git a/tests/cl/program/execute/builtin/atomic/atomic_int64_and-global-return.cl b/tests/cl/program/execute/builtin/atomic/atomic_int64_and-global-return.cl new file mode 100644 index 000000000..e5f36e3fd --- /dev/null +++ b/tests/cl/program/execute/builtin/atomic/atomic_int64_and-global-return.cl @@ -0,0 +1,65 @@ +/*! +[config] +name: atom_int64_and global, with usage of return variable +clc_version_min: 10 +require_device_extensions: cl_khr_int64_extended_atomics + +[test] +name: simple long +kernel_name: simple_long +dimensions: 1 +global_size: 1 0 0 +local_size: 1 0 0 +arg_out: 0 buffer long[2] 4 5 +arg_in: 0 buffer long[2] 5 0 +arg_in: 1 long -4 + +[test] +name: simple ulong +kernel_name: simple_ulong +dimensions: 1 +global_size: 1 0 0 +local_size: 1 0 0 +arg_out: 0 buffer ulong[2] 2 6 +arg_in: 0 buffer ulong[2] 6 0 +arg_in: 1 ulong 10 + +[test] +name: threads long +kernel_name: threads_long +dimensions: 1 +global_size: 8 0 0 +local_size: 8 0 0 +arg_out: 0 buffer long[18] 0 0 0 7 1 7 2 7 3 7 4 7 5 7 6 7 7 7 +arg_in: 0 buffer long[18] 7 0 7 0 7 0 7 0 7 0 7 0 7 0 7 0 7 0 + +[test] +name: threads ulong +kernel_name: threads_ulong +dimensions: 1 +global_size: 8 0 0 +local_size: 8 0 0 +arg_out: 0 buffer ulong[18] 0 0 0 7 1 7 2 7 3 7 4 7 5 7 6 7 7 7 +arg_in: 0 buffer ulong[18] 7 0 7 0 7 0 7 0 7 0 7 0 7 0 7 0 7 0 + +!*/ + +#define SIMPLE_TEST(TYPE) \ +kernel void simple_##TYPE(global TYPE *mem, TYPE value) { \ + mem[1] = atom_and(mem, value); \ +} + +#define THREADS_TEST(TYPE) \ +kernel void threads_##TYPE(global TYPE *mem) { \ + TYPE mul = mem[1]; \ + TYPE id = get_global_id(0); \ + TYPE ret = atom_and(mem, id); \ + TYPE ret2 = atom_and(&mem[(id+1)*2], id+ret*mul); \ + mem[(id+1)*2+1] = ret2; \ +} + +SIMPLE_TEST(long) +SIMPLE_TEST(ulong) + +THREADS_TEST(long) +THREADS_TEST(ulong) diff --git a/tests/cl/program/execute/builtin/atomic/atomic_int64_and-global.cl b/tests/cl/program/execute/builtin/atomic/atomic_int64_and-global.cl new file mode 100644 index 000000000..91e8d8762 --- /dev/null +++ b/tests/cl/program/execute/builtin/atomic/atomic_int64_and-global.cl @@ -0,0 +1,62 @@ +/*! +[config] +name: atom_int64_and global, no usage of return variable +clc_version_min: 10 +require_device_extensions: cl_khr_int64_extended_atomics + +[test] +name: simple long +kernel_name: simple_long +dimensions: 1 +global_size: 1 0 0 +local_size: 1 0 0 +arg_out: 0 buffer long[1] 4 +arg_in: 0 buffer long[1] 5 +arg_in: 1 long -4 + +[test] +name: simple ulong +kernel_name: simple_ulong +dimensions: 1 +global_size: 1 0 0 +local_size: 1 0 0 +arg_out: 0 buffer ulong[1] 2 +arg_in: 0 buffer ulong[1] 6 +arg_in: 1 ulong 10 + +[test] +name: threads long +kernel_name: threads_long +dimensions: 1 +global_size: 8 0 0 +local_size: 8 0 0 +arg_out: 0 buffer long[1] 0 +arg_in: 0 buffer long[1] -7 + +[test] +name: threads ulong +kernel_name: threads_ulong +dimensions: 1 +global_size: 8 0 0 +local_size: 8 0 0 +arg_out: 0 buffer ulong[1] 0 +arg_in: 0 buffer ulong[1] 7 + +!*/ + +#define SIMPLE_TEST(TYPE) \ +kernel void simple_##TYPE(global TYPE *mem, TYPE value) { \ + atom_and(mem, value); \ +} + +#define THREADS_TEST(TYPE) \ +kernel void threads_##TYPE(global TYPE *mem) { \ + TYPE id = get_global_id(0); \ + atom_and(mem, id); \ +} + +SIMPLE_TEST(long) +SIMPLE_TEST(ulong) + +THREADS_TEST(long) +THREADS_TEST(ulong) diff --git a/tests/cl/program/execute/builtin/atomic/atomic_int64_and-local.cl b/tests/cl/program/execute/builtin/atomic/atomic_int64_and-local.cl new file mode 100644 index 000000000..302ae4bff --- /dev/null +++ b/tests/cl/program/execute/builtin/atomic/atomic_int64_and-local.cl @@ -0,0 +1,71 @@ +/*! +[config] +name: atom_int64_and local +clc_version_min: 10 +require_device_extensions: cl_khr_int64_extended_atomics + +[test] +name: simple long +kernel_name: simple_long +dimensions: 1 +global_size: 1 0 0 +local_size: 1 0 0 +arg_out: 0 buffer long[2] -4 4 +arg_in: 1 buffer long[1] NULL +arg_in: 2 long -4 +arg_in: 3 long 5 + +[test] +name: simple ulong +kernel_name: simple_ulong +dimensions: 1 +global_size: 1 0 0 +local_size: 1 0 0 +arg_out: 0 buffer ulong[2] 4 4 +arg_in: 1 buffer ulong[1] NULL +arg_in: 2 ulong 4 +arg_in: 3 ulong 5 + +[test] +name: threads long +kernel_name: threads_long +dimensions: 1 +global_size: 8 0 0 +local_size: 8 0 0 +arg_out: 0 buffer long[1] 0 +arg_in: 1 buffer long[1] NULL + +[test] +name: threads ulong +kernel_name: threads_ulong +dimensions: 1 +global_size: 8 0 0 +local_size: 8 0 0 +arg_out: 0 buffer ulong[1] 0 +arg_in: 1 buffer ulong[1] NULL + +!*/ + +#define SIMPLE_TEST(TYPE) \ +kernel void simple_##TYPE(global TYPE *out, local TYPE *mem, TYPE initial, TYPE value) { \ + *mem = initial; \ + TYPE a = atom_and(mem, value); \ + out[0] = a; \ + out[1] = *mem; \ +} + +#define THREADS_TEST(TYPE) \ +kernel void threads_##TYPE(global TYPE *out, local TYPE *mem) { \ + *mem = 7; \ + barrier(CLK_LOCAL_MEM_FENCE); \ + TYPE id = get_local_id(0); \ + atom_and(mem, id); \ + barrier(CLK_LOCAL_MEM_FENCE); \ + *out = *mem; \ +} + +SIMPLE_TEST(long) +SIMPLE_TEST(ulong) + +THREADS_TEST(long) +THREADS_TEST(ulong) diff --git a/tests/cl/program/execute/builtin/atomic/atomic_int64_cmpxchg-global-return.cl b/tests/cl/program/execute/builtin/atomic/atomic_int64_cmpxchg-global-return.cl new file mode 100644 index 000000000..8075e5d90 --- /dev/null +++ b/tests/cl/program/execute/builtin/atomic/atomic_int64_cmpxchg-global-return.cl @@ -0,0 +1,74 @@ +/*! +[config] +name: atom_int64_cmpxchg global return +clc_version_min: 10 +require_device_extensions: cl_khr_int64_base_atomics + +[test] +name: simple long +kernel_name: simple_long +dimensions: 1 +global_size: 1 0 0 +arg_out: 0 buffer long[2] 5 -4 +arg_in: 0 buffer long[2] -4 -4 +arg_in: 1 buffer long[2] -4 3 +arg_in: 2 buffer long[2] 5 5 +arg_out: 3 buffer long[2] -4 -4 + +[test] +name: simple ulong +kernel_name: simple_ulong +dimensions: 1 +global_size: 1 0 0 +arg_out: 0 buffer ulong[2] 5 4 +arg_in: 0 buffer ulong[2] 4 4 +arg_in: 1 buffer ulong[2] 4 3 +arg_in: 2 buffer ulong[2] 5 5 +arg_out: 3 buffer ulong[2] 4 4 + +[test] +name: threads long +kernel_name: threads_long +dimensions: 1 +global_size: 8 0 0 +local_size: 8 0 0 +arg_out: 0 buffer long[1] 8 +arg_in: 0 buffer long[1] 0 +arg_out: 1 buffer long[8] 0 1 2 3 4 5 6 7 + +[test] +name: threads ulong +kernel_name: threads_ulong +dimensions: 1 +global_size: 8 0 0 +local_size: 8 0 0 +arg_out: 0 buffer ulong[1] 8 +arg_in: 0 buffer ulong[1] 0 +arg_out: 1 buffer ulong[8] 0 1 2 3 4 5 6 7 + +!*/ + +#define SIMPLE_TEST(TYPE) \ +kernel void simple_##TYPE(global TYPE *initial, global TYPE *compare, global TYPE *value, global TYPE *old) { \ + old[0] = atom_cmpxchg(initial, compare[0], value[0]); \ + old[1] = atom_cmpxchg(initial+1, compare[1], value[1]); \ +} + +#define THREADS_TEST(TYPE) \ +kernel void threads_##TYPE(global TYPE *out, global TYPE *old) { \ + long i; \ + barrier(CLK_GLOBAL_MEM_FENCE); \ + TYPE id = get_global_id(0); \ + for(i = 0; i < get_global_size(0); i++){ \ + TYPE old_val = atom_cmpxchg(out, id, id+1); \ + if (old_val == id) /* success */ \ + old[id] = old_val; \ + barrier(CLK_GLOBAL_MEM_FENCE); \ + } \ +} + +SIMPLE_TEST(long) +SIMPLE_TEST(ulong) + +THREADS_TEST(long) +THREADS_TEST(ulong) diff --git a/tests/cl/program/execute/builtin/atomic/atomic_int64_cmpxchg-global.cl b/tests/cl/program/execute/builtin/atomic/atomic_int64_cmpxchg-global.cl new file mode 100644 index 000000000..7b59ab197 --- /dev/null +++ b/tests/cl/program/execute/builtin/atomic/atomic_int64_cmpxchg-global.cl @@ -0,0 +1,70 @@ +/*! +[config] +name: atom_int64_cmpxchg global +clc_version_min: 10 +require_device_extensions: cl_khr_int64_base_atomics + +[test] +name: simple long +kernel_name: simple_long +dimensions: 1 +global_size: 1 0 0 +arg_out: 0 buffer long[2] 5 -4 +arg_in: 0 buffer long[2] -4 -4 +arg_in: 1 buffer long[2] -4 3 +arg_in: 2 buffer long[2] 5 5 + +[test] +name: simple ulong +kernel_name: simple_ulong +dimensions: 1 +global_size: 1 0 0 +arg_out: 0 buffer ulong[2] 5 4 +arg_in: 0 buffer ulong[2] 4 4 +arg_in: 1 buffer ulong[2] 4 3 +arg_in: 2 buffer ulong[2] 5 5 + +[test] +name: threads long +kernel_name: threads_long +dimensions: 1 +global_size: 8 0 0 +local_size: 8 0 0 +arg_out: 0 buffer long[1] 8 +arg_in: 0 buffer long[1] 0 + +[test] +name: threads ulong +kernel_name: threads_ulong +dimensions: 1 +global_size: 8 0 0 +local_size: 8 0 0 +arg_out: 0 buffer ulong[1] 8 +arg_in: 0 buffer ulong[1] 0 + +!*/ + +#define SIMPLE_TEST(TYPE) \ +kernel void simple_##TYPE(global TYPE *initial, global TYPE *compare, global TYPE *value) { \ + atom_cmpxchg(initial, compare[0], value[0]); \ + atom_cmpxchg(initial+1, compare[1], value[1]); \ +} + +#define THREADS_TEST(TYPE) \ +kernel void threads_##TYPE(global TYPE *out) { \ + long i; \ + barrier(CLK_GLOBAL_MEM_FENCE); \ + TYPE id = get_global_id(0); \ + for(i = 0; i < get_global_size(0); i++){ \ + if (i == id){ \ + atom_cmpxchg(out, id, id+1); \ + } \ + barrier(CLK_GLOBAL_MEM_FENCE); \ + } \ +} + +SIMPLE_TEST(long) +SIMPLE_TEST(ulong) + +THREADS_TEST(long) +THREADS_TEST(ulong) diff --git a/tests/cl/program/execute/builtin/atomic/atomic_int64_cmpxchg-local.cl b/tests/cl/program/execute/builtin/atomic/atomic_int64_cmpxchg-local.cl new file mode 100644 index 000000000..4f93c15e0 --- /dev/null +++ b/tests/cl/program/execute/builtin/atomic/atomic_int64_cmpxchg-local.cl @@ -0,0 +1,82 @@ +/*! +[config] +name: atom_int64_cmpxchg local +clc_version_min: 10 +require_device_extensions: cl_khr_int64_base_atomics + +[test] +name: simple long +kernel_name: simple_long +dimensions: 1 +global_size: 1 0 0 +local_size: 1 0 0 +arg_out: 0 buffer long[4] -4 5 -4 -4 +arg_in: 1 buffer long[2] NULL +arg_in: 2 buffer long[2] -4 -4 +arg_in: 3 buffer long[2] -4 3 +arg_in: 4 buffer long[2] 5 5 + +[test] +name: simple ulong +kernel_name: simple_ulong +dimensions: 1 +global_size: 1 0 0 +local_size: 1 0 0 +arg_out: 0 buffer ulong[4] 4 5 4 4 +arg_in: 1 buffer ulong[2] NULL +arg_in: 2 buffer ulong[2] 4 4 +arg_in: 3 buffer ulong[2] 4 3 +arg_in: 4 buffer ulong[2] 5 5 + +[test] +name: threads long +kernel_name: threads_long +dimensions: 1 +global_size: 8 0 0 +local_size: 8 0 0 +arg_out: 0 buffer long[1] 8 +arg_in: 1 buffer long[1] NULL + +[test] +name: threads ulong +kernel_name: threads_ulong +dimensions: 1 +global_size: 8 0 0 +local_size: 8 0 0 +arg_out: 0 buffer ulong[1] 8 +arg_in: 1 buffer ulong[1] NULL + +!*/ + +#define SIMPLE_TEST(TYPE) \ +kernel void simple_##TYPE(global TYPE *out, local TYPE *mem, global TYPE *initial, global TYPE *compare, global TYPE *value) { \ + mem[0] = initial[0]; \ + mem[1] = initial[1]; \ + TYPE a = atom_cmpxchg(mem, compare[0], value[0]); \ + out[0] = a; \ + out[1] = *mem; \ + a = atom_cmpxchg(mem+1, compare[1], value[1]); \ + out[2] = a; \ + out[3] = mem[1]; \ +} + +#define THREADS_TEST(TYPE) \ +kernel void threads_##TYPE(global TYPE *out, local TYPE *mem) { \ + long i; \ + *mem = 0; \ + barrier(CLK_LOCAL_MEM_FENCE); \ + TYPE id = get_local_id(0); \ + for(i = 0; i < get_local_size(0); i++){ \ + if (i == id){ \ + atom_cmpxchg(mem, id, id+1); \ + } \ + barrier(CLK_LOCAL_MEM_FENCE); \ + } \ + *out = *mem; \ +} + +SIMPLE_TEST(long) +SIMPLE_TEST(ulong) + +THREADS_TEST(long) +THREADS_TEST(ulong) diff --git a/tests/cl/program/execute/builtin/atomic/atomic_int64_dec-global-return.cl b/tests/cl/program/execute/builtin/atomic/atomic_int64_dec-global-return.cl new file mode 100644 index 000000000..f5462a922 --- /dev/null +++ b/tests/cl/program/execute/builtin/atomic/atomic_int64_dec-global-return.cl @@ -0,0 +1,63 @@ +/*! +[config] +name: atom_int64_dec global, with usage of return variable +clc_version_min: 10 +require_device_extensions: cl_khr_int64_base_atomics + +[test] +name: simple long +kernel_name: simple_long +dimensions: 1 +global_size: 1 0 0 +local_size: 1 0 0 +arg_out: 0 buffer long[2] -5 -4 +arg_in: 0 buffer long[2] -4 0 + +[test] +name: simple ulong +kernel_name: simple_ulong +dimensions: 1 +global_size: 1 0 0 +local_size: 1 0 0 +arg_out: 0 buffer ulong[2] 1 2 +arg_in: 0 buffer ulong[2] 2 0 + +[test] +name: threads long +kernel_name: threads_long +dimensions: 1 +global_size: 8 0 0 +local_size: 8 0 0 +arg_out: 0 buffer long[18] -9 0 -1 0 1 2 2 3 3 4 4 5 5 6 6 7 7 8 +arg_in: 0 buffer long[18] -1 0 0 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 + +[test] +name: threads ulong +kernel_name: threads_ulong +dimensions: 1 +global_size: 8 0 0 +local_size: 8 0 0 +arg_out: 0 buffer ulong[18] 0 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 +arg_in: 0 buffer ulong[18] 8 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 + +!*/ + +#define SIMPLE_TEST(TYPE) \ +kernel void simple_##TYPE(global TYPE *mem) { \ + mem[1] = atom_dec(mem); \ +} + +#define THREADS_TEST(TYPE) \ +kernel void threads_##TYPE(global TYPE *mem) { \ + TYPE mul = mem[1]; \ + TYPE id = get_global_id(0); \ + TYPE ret = atom_dec(mem); \ + TYPE ret2 = atom_dec(&mem[(id+1)*2]); \ + mem[(id+1)*2+1] = ret2; \ +} + +SIMPLE_TEST(long) +SIMPLE_TEST(ulong) + +THREADS_TEST(long) +THREADS_TEST(ulong) diff --git a/tests/cl/program/execute/builtin/atomic/atomic_int64_dec-global.cl b/tests/cl/program/execute/builtin/atomic/atomic_int64_dec-global.cl new file mode 100644 index 000000000..426eeb8b3 --- /dev/null +++ b/tests/cl/program/execute/builtin/atomic/atomic_int64_dec-global.cl @@ -0,0 +1,59 @@ +/*! +[config] +name: atom_int64_dec global, no usage of return variable +clc_version_min: 10 +require_device_extensions: cl_khr_int64_base_atomics + +[test] +name: simple long +kernel_name: simple_long +dimensions: 1 +global_size: 1 0 0 +local_size: 1 0 0 +arg_out: 0 buffer long[1] -5 +arg_in: 0 buffer long[1] -4 + +[test] +name: simple ulong +kernel_name: simple_ulong +dimensions: 1 +global_size: 1 0 0 +local_size: 1 0 0 +arg_out: 0 buffer ulong[1] 1 +arg_in: 0 buffer ulong[1] 2 + +[test] +name: threads long +kernel_name: threads_long +dimensions: 1 +global_size: 8 0 0 +local_size: 8 0 0 +arg_out: 0 buffer long[1] -8 +arg_in: 0 buffer long[1] 0 + +[test] +name: threads ulong +kernel_name: threads_ulong +dimensions: 1 +global_size: 8 0 0 +local_size: 8 0 0 +arg_out: 0 buffer ulong[1] 1 +arg_in: 0 buffer ulong[1] 9 + +!*/ + +#define SIMPLE_TEST(TYPE) \ +kernel void simple_##TYPE(global TYPE *mem) { \ + atom_dec(mem); \ +} + +#define THREADS_TEST(TYPE) \ +kernel void threads_##TYPE(global TYPE *mem) { \ + atom_dec(mem); \ +} + +SIMPLE_TEST(long) +SIMPLE_TEST(ulong) + +THREADS_TEST(long) +THREADS_TEST(ulong) diff --git a/tests/cl/program/execute/builtin/atomic/atomic_int64_dec-local.cl b/tests/cl/program/execute/builtin/atomic/atomic_int64_dec-local.cl new file mode 100644 index 000000000..60896ea8b --- /dev/null +++ b/tests/cl/program/execute/builtin/atomic/atomic_int64_dec-local.cl @@ -0,0 +1,68 @@ +/*! +[config] +name: atom_int64_dec local +clc_version_min: 10 +require_device_extensions: cl_khr_int64_base_atomics + +[test] +name: simple long +kernel_name: simple_long +dimensions: 1 +global_size: 1 0 0 +local_size: 1 0 0 +arg_out: 0 buffer long[2] -2 -3 +arg_in: 1 buffer long[1] NULL +arg_in: 2 long -2 + +[test] +name: simple ulong +kernel_name: simple_ulong +dimensions: 1 +global_size: 1 0 0 +local_size: 1 0 0 +arg_out: 0 buffer ulong[2] 2 1 +arg_in: 1 buffer ulong[1] NULL +arg_in: 2 ulong 2 + +[test] +name: threads long +kernel_name: threads_long +dimensions: 1 +global_size: 8 0 0 +local_size: 8 0 0 +arg_out: 0 buffer long[1] 8 +arg_in: 1 buffer long[1] NULL + +[test] +name: threads ulong +kernel_name: threads_ulong +dimensions: 1 +global_size: 8 0 0 +local_size: 8 0 0 +arg_out: 0 buffer ulong[1] 8 +arg_in: 1 buffer ulong[1] NULL + +!*/ + +#define SIMPLE_TEST(TYPE) \ +kernel void simple_##TYPE(global TYPE *out, local TYPE *mem, TYPE initial) { \ + *mem = initial; \ + TYPE a = atom_dec(mem); \ + out[0] = a; \ + out[1] = *mem; \ +} + +#define THREADS_TEST(TYPE) \ +kernel void threads_##TYPE(global TYPE *out, local TYPE *mem) { \ + *mem = 16; \ + barrier(CLK_LOCAL_MEM_FENCE); \ + atom_dec(mem); \ + barrier(CLK_LOCAL_MEM_FENCE); \ + *out = *mem; \ +} + +SIMPLE_TEST(long) +SIMPLE_TEST(ulong) + +THREADS_TEST(long) +THREADS_TEST(ulong) diff --git a/tests/cl/program/execute/builtin/atomic/atomic_int64_inc-global-return.cl b/tests/cl/program/execute/builtin/atomic/atomic_int64_inc-global-return.cl new file mode 100644 index 000000000..3a9913faf --- /dev/null +++ b/tests/cl/program/execute/builtin/atomic/atomic_int64_inc-global-return.cl @@ -0,0 +1,63 @@ +/*! +[config] +name: atom_int64_inc global, with usage of return variable +clc_version_min: 10 +require_device_extensions: cl_khr_int64_base_atomics + +[test] +name: simple long +kernel_name: simple_long +dimensions: 1 +global_size: 1 0 0 +local_size: 1 0 0 +arg_out: 0 buffer long[2] -4 -5 +arg_in: 0 buffer long[2] -5 0 + +[test] +name: simple ulong +kernel_name: simple_ulong +dimensions: 1 +global_size: 1 0 0 +local_size: 1 0 0 +arg_out: 0 buffer ulong[2] 1 0 +arg_in: 0 buffer ulong[2] 0 0 + +[test] +name: threads long +kernel_name: threads_long +dimensions: 1 +global_size: 8 0 0 +local_size: 8 0 0 +arg_out: 0 buffer long[18] -1 0 0 -1 2 1 3 2 4 3 5 4 6 5 7 6 8 7 +arg_in: 0 buffer long[18] -9 0 -1 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 + +[test] +name: threads ulong +kernel_name: threads_ulong +dimensions: 1 +global_size: 8 0 0 +local_size: 8 0 0 +arg_out: 0 buffer ulong[18] 8 0 1 0 2 1 3 2 4 3 5 4 6 5 7 6 8 7 +arg_in: 0 buffer ulong[18] 0 0 0 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 + +!*/ + +#define SIMPLE_TEST(TYPE) \ +kernel void simple_##TYPE(global TYPE *mem) { \ + mem[1] = atom_inc(mem); \ +} + +#define THREADS_TEST(TYPE) \ +kernel void threads_##TYPE(global TYPE *mem) { \ + TYPE mul = mem[1]; \ + TYPE id = get_global_id(0); \ + TYPE ret = atom_inc(mem); \ + TYPE ret2 = atom_inc(&mem[(id+1)*2]); \ + mem[(id+1)*2+1] = ret2; \ +} + +SIMPLE_TEST(long) +SIMPLE_TEST(ulong) + +THREADS_TEST(long) +THREADS_TEST(ulong) diff --git a/tests/cl/program/execute/builtin/atomic/atomic_int64_inc-global.cl b/tests/cl/program/execute/builtin/atomic/atomic_int64_inc-global.cl new file mode 100644 index 000000000..06c896815 --- /dev/null +++ b/tests/cl/program/execute/builtin/atomic/atomic_int64_inc-global.cl @@ -0,0 +1,59 @@ +/*! +[config] +name: atom_int64_inc global, no usage of return variable +clc_version_min: 10 +require_device_extensions: cl_khr_int64_base_atomics + +[test] +name: simple long +kernel_name: simple_long +dimensions: 1 +global_size: 1 0 0 +local_size: 1 0 0 +arg_out: 0 buffer long[1] -4 +arg_in: 0 buffer long[1] -5 + +[test] +name: simple ulong +kernel_name: simple_ulong +dimensions: 1 +global_size: 1 0 0 +local_size: 1 0 0 +arg_out: 0 buffer ulong[1] 1 +arg_in: 0 buffer ulong[1] 0 + +[test] +name: threads long +kernel_name: threads_long +dimensions: 1 +global_size: 8 0 0 +local_size: 8 0 0 +arg_out: 0 buffer long[1] 0 +arg_in: 0 buffer long[1] -8 + +[test] +name: threads ulong +kernel_name: threads_ulong +dimensions: 1 +global_size: 8 0 0 +local_size: 8 0 0 +arg_out: 0 buffer ulong[1] 8 +arg_in: 0 buffer ulong[1] 0 + +!*/ + +#define SIMPLE_TEST(TYPE) \ +kernel void simple_##TYPE(global TYPE *mem) { \ + atom_inc(mem); \ +} + +#define THREADS_TEST(TYPE) \ +kernel void threads_##TYPE(global TYPE *mem) { \ + atom_inc(mem); \ +} + +SIMPLE_TEST(long) +SIMPLE_TEST(ulong) + +THREADS_TEST(long) +THREADS_TEST(ulong) diff --git a/tests/cl/program/execute/builtin/atomic/atomic_int64_inc-local.cl b/tests/cl/program/execute/builtin/atomic/atomic_int64_inc-local.cl new file mode 100644 index 000000000..f5acb9da5 --- /dev/null +++ b/tests/cl/program/execute/builtin/atomic/atomic_int64_inc-local.cl @@ -0,0 +1,68 @@ +/*! +[config] +name: atom_int64_inc local +clc_version_min: 10 +require_device_extensions: cl_khr_int64_base_atomics + +[test] +name: simple long +kernel_name: simple_long +dimensions: 1 +global_size: 1 0 0 +local_size: 1 0 0 +arg_out: 0 buffer long[2] -2 -1 +arg_in: 1 buffer long[1] NULL +arg_in: 2 long -2 + +[test] +name: simple ulong +kernel_name: simple_ulong +dimensions: 1 +global_size: 1 0 0 +local_size: 1 0 0 +arg_out: 0 buffer ulong[2] 2 3 +arg_in: 1 buffer ulong[1] NULL +arg_in: 2 ulong 2 + +[test] +name: threads long +kernel_name: threads_long +dimensions: 1 +global_size: 8 0 0 +local_size: 8 0 0 +arg_out: 0 buffer long[1] 8 +arg_in: 1 buffer long[1] NULL + +[test] +name: threads ulong +kernel_name: threads_ulong +dimensions: 1 +global_size: 8 0 0 +local_size: 8 0 0 +arg_out: 0 buffer ulong[1] 8 +arg_in: 1 buffer ulong[1] NULL + +!*/ + +#define SIMPLE_TEST(TYPE) \ +kernel void simple_##TYPE(global TYPE *out, local TYPE *mem, TYPE initial) { \ + *mem = initial; \ + TYPE a = atom_inc(mem); \ + out[0] = a; \ + out[1] = *mem; \ +} + +#define THREADS_TEST(TYPE) \ +kernel void threads_##TYPE(global TYPE *out, local TYPE *mem) { \ + *mem = 0; \ + barrier(CLK_LOCAL_MEM_FENCE); \ + atom_inc(mem); \ + barrier(CLK_LOCAL_MEM_FENCE); \ + *out = *mem; \ +} + +SIMPLE_TEST(long) +SIMPLE_TEST(ulong) + +THREADS_TEST(long) +THREADS_TEST(ulong) diff --git a/tests/cl/program/execute/builtin/atomic/atomic_int64_max-global-return.cl b/tests/cl/program/execute/builtin/atomic/atomic_int64_max-global-return.cl new file mode 100644 index 000000000..359eeba50 --- /dev/null +++ b/tests/cl/program/execute/builtin/atomic/atomic_int64_max-global-return.cl @@ -0,0 +1,63 @@ +/*! +[config] +name: atom_int64_max global, with usage of return variable +clc_version_min: 10 +require_device_extensions: cl_khr_int64_extended_atomics + +[test] +name: simple long +kernel_name: simple_long +dimensions: 1 +global_size: 1 0 0 +local_size: 1 0 0 +arg_out: 0 buffer long[2] 1 -5 +arg_in: 0 buffer long[2] -5 0 + +[test] +name: simple ulong +kernel_name: simple_ulong +dimensions: 1 +global_size: 1 0 0 +local_size: 1 0 0 +arg_out: 0 buffer ulong[2] 1 0 +arg_in: 0 buffer ulong[2] 0 0 + +[test] +name: threads long +kernel_name: threads_long +dimensions: 1 +global_size: 8 0 0 +local_size: 8 0 0 +arg_out: 0 buffer long[18] 7 0 1 1 1 0 2 1 3 2 4 3 5 4 6 5 7 6 +arg_in: 0 buffer long[18] 0 0 1 0 0 0 1 0 2 0 3 0 4 0 5 0 6 0 + +[test] +name: threads ulong +kernel_name: threads_ulong +dimensions: 1 +global_size: 8 0 0 +local_size: 8 0 0 +arg_out: 0 buffer ulong[18] 7 0 1 1 1 0 2 1 3 2 4 3 5 4 6 5 7 6 +arg_in: 0 buffer ulong[18] 0 0 1 0 0 0 1 0 2 0 3 0 4 0 5 0 6 0 + +!*/ + +#define SIMPLE_TEST(TYPE) \ +kernel void simple_##TYPE(global TYPE *mem) { \ + mem[1] = atom_max(mem, 1); \ +} + +#define THREADS_TEST(TYPE) \ +kernel void threads_##TYPE(global TYPE *mem) { \ + TYPE mul = mem[1]; \ + TYPE id = get_global_id(0); \ + TYPE ret = atom_max(mem, id); \ + TYPE ret2 = atom_max(&mem[(id+1)*2], id+ret*mul); \ + mem[(id+1)*2+1] = ret2; \ +} + +SIMPLE_TEST(long) +SIMPLE_TEST(ulong) + +THREADS_TEST(long) +THREADS_TEST(ulong) diff --git a/tests/cl/program/execute/builtin/atomic/atomic_int64_max-global.cl b/tests/cl/program/execute/builtin/atomic/atomic_int64_max-global.cl new file mode 100644 index 000000000..ad83cbc35 --- /dev/null +++ b/tests/cl/program/execute/builtin/atomic/atomic_int64_max-global.cl @@ -0,0 +1,60 @@ +/*! +[config] +name: atom_int64_max global, no usage of return variable +clc_version_min: 10 +require_device_extensions: cl_khr_int64_extended_atomics + +[test] +name: simple long +kernel_name: simple_long +dimensions: 1 +global_size: 1 0 0 +local_size: 1 0 0 +arg_out: 0 buffer long[1] 1 +arg_in: 0 buffer long[1] -5 + +[test] +name: simple ulong +kernel_name: simple_ulong +dimensions: 1 +global_size: 1 0 0 +local_size: 1 0 0 +arg_out: 0 buffer ulong[1] 1 +arg_in: 0 buffer ulong[1] 0 + +[test] +name: threads long +kernel_name: threads_long +dimensions: 1 +global_size: 8 0 0 +local_size: 8 0 0 +arg_out: 0 buffer long[1] 7 +arg_in: 0 buffer long[1] 0 + +[test] +name: threads ulong +kernel_name: threads_ulong +dimensions: 1 +global_size: 8 0 0 +local_size: 8 0 0 +arg_out: 0 buffer ulong[1] 7 +arg_in: 0 buffer ulong[1] 0 + +!*/ + +#define SIMPLE_TEST(TYPE) \ +kernel void simple_##TYPE(global TYPE *mem) { \ + atom_max(mem, 1); \ +} + +#define THREADS_TEST(TYPE) \ +kernel void threads_##TYPE(global TYPE *mem) { \ + TYPE id = get_global_id(0); \ + atom_max(mem, id); \ +} + +SIMPLE_TEST(long) +SIMPLE_TEST(ulong) + +THREADS_TEST(long) +THREADS_TEST(ulong) diff --git a/tests/cl/program/execute/builtin/atomic/atomic_int64_max-local.cl b/tests/cl/program/execute/builtin/atomic/atomic_int64_max-local.cl new file mode 100644 index 000000000..442d1fbb0 --- /dev/null +++ b/tests/cl/program/execute/builtin/atomic/atomic_int64_max-local.cl @@ -0,0 +1,82 @@ +/*! +[config] +name: atom_int64_max local +clc_version_min: 10 +require_device_extensions: cl_khr_int64_extended_atomics + +[test] +name: simple long +kernel_name: simple_long +dimensions: 1 +global_size: 1 0 0 +local_size: 1 0 0 +arg_out: 0 buffer long[2] -1 2 +arg_in: 1 buffer long[1] NULL +arg_in: 2 long -1 +arg_in: 3 long 2 + +[test] +name: simple ulong +kernel_name: simple_ulong +dimensions: 1 +global_size: 1 0 0 +local_size: 1 0 0 +arg_out: 0 buffer ulong[2] 2 3 +arg_in: 1 buffer ulong[1] NULL +arg_in: 2 ulong 2 +arg_in: 3 ulong 3 + +[test] +name: simple ulong 2 +kernel_name: simple_ulong +dimensions: 1 +global_size: 1 0 0 +local_size: 1 0 0 +arg_out: 0 buffer ulong[2] 3 4294967295 +arg_in: 1 buffer ulong[1] NULL +arg_in: 2 ulong 3 +arg_in: 3 ulong 0xffffffff + + +[test] +name: threads long +kernel_name: threads_long +dimensions: 1 +global_size: 8 0 0 +local_size: 8 0 0 +arg_out: 0 buffer long[1] 7 +arg_in: 1 buffer long[1] NULL + +[test] +name: threads ulong +kernel_name: threads_ulong +dimensions: 1 +global_size: 8 0 0 +local_size: 8 0 0 +arg_out: 0 buffer ulong[1] 7 +arg_in: 1 buffer ulong[1] NULL + +!*/ + +#define SIMPLE_TEST(TYPE) \ +kernel void simple_##TYPE(global TYPE *out, local TYPE *mem, TYPE initial, TYPE other) { \ + *mem = initial; \ + TYPE a = atom_max(mem, other); \ + out[0] = a; \ + out[1] = *mem; \ +} + +#define THREADS_TEST(TYPE) \ +kernel void threads_##TYPE(global TYPE *out, local TYPE *mem) { \ + *mem = 0; \ + barrier(CLK_LOCAL_MEM_FENCE); \ + atom_max(mem, get_global_id(0)); \ + barrier(CLK_LOCAL_MEM_FENCE); \ + *out = *mem; \ +} + +SIMPLE_TEST(long) +SIMPLE_TEST(ulong) + +THREADS_TEST(long) +THREADS_TEST(ulong) diff --git a/tests/cl/program/execute/builtin/atomic/atomic_int64_min-global-return.cl b/tests/cl/program/execute/builtin/atomic/atomic_int64_min-global-return.cl new file mode 100644 index 000000000..52eefd796 --- /dev/null +++ b/tests/cl/program/execute/builtin/atomic/atomic_int64_min-global-return.cl @@ -0,0 +1,63 @@ +/*! +[config] +name: atom_int64_min global, with usage of return variable +clc_version_min: 10 +require_device_extensions: cl_khr_int64_extended_atomics + +[test] +name: simple long +kernel_name: simple_long +dimensions: 1 +global_size: 1 0 0 +local_size: 1 0 0 +arg_out: 0 buffer long[2] 1 5 +arg_in: 0 buffer long[2] 5 0 + +[test] +name: simple ulong +kernel_name: simple_ulong +dimensions: 1 +global_size: 1 0 0 +local_size: 1 0 0 +arg_out: 0 buffer ulong[2] 1 2 +arg_in: 0 buffer ulong[2] 2 0 + +[test] +name: threads long +kernel_name: threads_long +dimensions: 1 +global_size: 8 0 0 +local_size: 8 0 0 +arg_out: 0 buffer long[18] 0 0 -1 -1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 +arg_in: 0 buffer long[18] 7 0 -1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 + +[test] +name: threads ulong +kernel_name: threads_ulong +dimensions: 1 +global_size: 8 0 0 +local_size: 8 0 0 +arg_out: 0 buffer ulong[18] 0 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 +arg_in: 0 buffer ulong[18] 7 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 + +!*/ + +#define SIMPLE_TEST(TYPE) \ +kernel void simple_##TYPE(global TYPE *mem) { \ + mem[1] = atom_min(mem, 1); \ +} + +#define THREADS_TEST(TYPE) \ +kernel void threads_##TYPE(global TYPE *mem) { \ + TYPE mul = mem[1]; \ + TYPE id = get_global_id(0); \ + TYPE ret = atom_min(mem, id); \ + TYPE ret2 = atom_min(&mem[(id+1)*2], id+ret*mul); \ + mem[(id+1)*2+1] = ret2; \ +} + +SIMPLE_TEST(long) +SIMPLE_TEST(ulong) + +THREADS_TEST(long) +THREADS_TEST(ulong) diff --git a/tests/cl/program/execute/builtin/atomic/atomic_int64_min-global.cl b/tests/cl/program/execute/builtin/atomic/atomic_int64_min-global.cl new file mode 100644 index 000000000..13bf2da3d --- /dev/null +++ b/tests/cl/program/execute/builtin/atomic/atomic_int64_min-global.cl @@ -0,0 +1,60 @@ +/*! +[config] +name: atom_int64_min global, no usage of return variable +clc_version_min: 10 +require_device_extensions: cl_khr_int64_extended_atomics + +[test] +name: simple long +kernel_name: simple_long +dimensions: 1 +global_size: 1 0 0 +local_size: 1 0 0 +arg_out: 0 buffer long[1] -5 +arg_in: 0 buffer long[1] -5 + +[test] +name: simple ulong +kernel_name: simple_ulong +dimensions: 1 +global_size: 1 0 0 +local_size: 1 0 0 +arg_out: 0 buffer ulong[1] 1 +arg_in: 0 buffer ulong[1] 2 + +[test] +name: threads long +kernel_name: threads_long +dimensions: 1 +global_size: 8 0 0 +local_size: 8 0 0 +arg_out: 0 buffer long[1] 0 +arg_in: 0 buffer long[1] 7 + +[test] +name: threads ulong +kernel_name: threads_ulong +dimensions: 1 +global_size: 8 0 0 +local_size: 8 0 0 +arg_out: 0 buffer ulong[1] 0 +arg_in: 0 buffer ulong[1] 7 + +!*/ + +#define SIMPLE_TEST(TYPE) \ +kernel void simple_##TYPE(global TYPE *mem) { \ + atom_min(mem, 1); \ +} + +#define THREADS_TEST(TYPE) \ +kernel void threads_##TYPE(global TYPE *mem) { \ + TYPE id = get_global_id(0); \ + atom_min(mem, id); \ +} + +SIMPLE_TEST(long) +SIMPLE_TEST(ulong) + +THREADS_TEST(long) +THREADS_TEST(ulong) diff --git a/tests/cl/program/execute/builtin/atomic/atomic_int64_min-local.cl b/tests/cl/program/execute/builtin/atomic/atomic_int64_min-local.cl new file mode 100644 index 000000000..f51334f12 --- /dev/null +++ b/tests/cl/program/execute/builtin/atomic/atomic_int64_min-local.cl @@ -0,0 +1,82 @@ +/*! +[config] +name: atom_int64_min local +clc_version_min: 10 +require_device_extensions: cl_khr_int64_extended_atomics + +[test] +name: simple long +kernel_name: simple_long +dimensions: 1 +global_size: 1 0 0 +local_size: 1 0 0 +arg_out: 0 buffer long[2] 1 -2 +arg_in: 1 buffer long[1] NULL +arg_in: 2 long 1 +arg_in: 3 long -2 + +[test] +name: simple ulong +kernel_name: simple_ulong +dimensions: 1 +global_size: 1 0 0 +local_size: 1 0 0 +arg_out: 0 buffer ulong[2] 3 2 +arg_in: 1 buffer ulong[1] NULL +arg_in: 2 ulong 3 +arg_in: 3 ulong 2 + +[test] +name: simple ulong 2 +kernel_name: simple_ulong +dimensions: 1 +global_size: 1 0 0 +local_size: 1 0 0 +arg_out: 0 buffer ulong[2] 4294967295 3 +arg_in: 1 buffer ulong[1] NULL +arg_in: 2 ulong 4294967295 +arg_in: 3 ulong 3 + + +[test] +name: threads long +kernel_name: threads_long +dimensions: 1 +global_size: 8 0 0 +local_size: 8 0 0 +arg_out: 0 buffer long[1] 0 +arg_in: 1 buffer long[1] NULL + +[test] +name: threads ulong +kernel_name: threads_ulong +dimensions: 1 +global_size: 8 0 0 +local_size: 8 0 0 +arg_out: 0 buffer ulong[1] 0 +arg_in: 1 buffer ulong[1] NULL + +!*/ + +#define SIMPLE_TEST(TYPE) \ +kernel void simple_##TYPE(global TYPE *out, local TYPE *mem, TYPE initial, TYPE other) { \ + *mem = initial; \ + TYPE a = atom_min(mem, other); \ + out[0] = a; \ + out[1] = *mem; \ +} + +#define THREADS_TEST(TYPE) \ +kernel void threads_##TYPE(global TYPE *out, local TYPE *mem) { \ + *mem = 8; \ + barrier(CLK_LOCAL_MEM_FENCE); \ + atom_min(mem, get_global_id(0)); \ + barrier(CLK_LOCAL_MEM_FENCE); \ + *out = *mem; \ +} + +SIMPLE_TEST(long) +SIMPLE_TEST(ulong) + +THREADS_TEST(long) +THREADS_TEST(ulong) diff --git a/tests/cl/program/execute/builtin/atomic/atomic_int64_or-global-return.cl b/tests/cl/program/execute/builtin/atomic/atomic_int64_or-global-return.cl new file mode 100644 index 000000000..63e37b3af --- /dev/null +++ b/tests/cl/program/execute/builtin/atomic/atomic_int64_or-global-return.cl @@ -0,0 +1,65 @@ +/*! +[config] +name: atom_int64_or global, with usage of return variable +clc_version_min: 10 +require_device_extensions: cl_khr_int64_extended_atomics + +[test] +name: simple long +kernel_name: simple_long +dimensions: 1 +global_size: 1 0 0 +local_size: 1 0 0 +arg_out: 0 buffer long[2] -3 5 +arg_in: 0 buffer long[2] 5 0 +arg_in: 1 long -4 + +[test] +name: simple ulong +kernel_name: simple_ulong +dimensions: 1 +global_size: 1 0 0 +local_size: 1 0 0 +arg_out: 0 buffer ulong[2] 14 6 +arg_in: 0 buffer ulong[2] 6 0 +arg_in: 1 ulong 10 + +[test] +name: threads long +kernel_name: threads_long +dimensions: 1 +global_size: 8 0 0 +local_size: 8 0 0 +arg_out: 0 buffer long[18] 7 0 7 7 3 2 6 4 3 0 6 2 7 2 14 8 15 8 +arg_in: 0 buffer long[18] 0 0 7 0 2 0 4 0 0 0 2 0 2 0 8 0 8 0 + +[test] +name: threads ulong +kernel_name: threads_ulong +dimensions: 1 +global_size: 8 0 0 +local_size: 8 0 0 +arg_out: 0 buffer long[18] 7 0 7 7 3 2 6 4 3 0 6 2 7 2 14 8 15 8 +arg_in: 0 buffer long[18] 0 0 7 0 2 0 4 0 0 0 2 0 2 0 8 0 8 0 + +!*/ + +#define SIMPLE_TEST(TYPE) \ +kernel void simple_##TYPE(global TYPE *mem, TYPE value) { \ + mem[1] = atom_or(mem, value); \ +} + +#define THREADS_TEST(TYPE) \ +kernel void threads_##TYPE(global TYPE *mem) { \ + TYPE mul = mem[1]; \ + TYPE id = get_global_id(0); \ + TYPE ret = atom_or(mem, id); \ + TYPE ret2 = atom_or(&mem[(id+1)*2], id+ret*mul); \ + mem[(id+1)*2+1] = ret2; \ +} + +SIMPLE_TEST(long) +SIMPLE_TEST(ulong) + +THREADS_TEST(long) +THREADS_TEST(ulong) diff --git a/tests/cl/program/execute/builtin/atomic/atomic_int64_or-global.cl b/tests/cl/program/execute/builtin/atomic/atomic_int64_or-global.cl new file mode 100644 index 000000000..1c70d6c70 --- /dev/null +++ b/tests/cl/program/execute/builtin/atomic/atomic_int64_or-global.cl @@ -0,0 +1,62 @@ +/*! +[config] +name: atom_int64_or global, no usage of return variable +clc_version_min: 10 +require_device_extensions: cl_khr_int64_extended_atomics + +[test] +name: simple long +kernel_name: simple_long +dimensions: 1 +global_size: 1 0 0 +local_size: 1 0 0 +arg_out: 0 buffer long[1] -3 +arg_in: 0 buffer long[1] 5 +arg_in: 1 long -4 + +[test] +name: simple ulong +kernel_name: simple_ulong +dimensions: 1 +global_size: 1 0 0 +local_size: 1 0 0 +arg_out: 0 buffer ulong[1] 14 +arg_in: 0 buffer ulong[1] 6 +arg_in: 1 ulong 10 + +[test] +name: threads long +kernel_name: threads_long +dimensions: 1 +global_size: 8 0 0 +local_size: 8 0 0 +arg_out: 0 buffer long[1] 7 +arg_in: 0 buffer long[1] 0 + +[test] +name: threads ulong +kernel_name: threads_ulong +dimensions: 1 +global_size: 8 0 0 +local_size: 8 0 0 +arg_out: 0 buffer ulong[1] 7 +arg_in: 0 buffer ulong[1] 0 + +!*/ + +#define SIMPLE_TEST(TYPE) \ +kernel void simple_##TYPE(global TYPE *mem, TYPE value) { \ + atom_or(mem, value); \ +} + +#define THREADS_TEST(TYPE) \ +kernel void threads_##TYPE(global TYPE *mem) { \ + TYPE id = get_global_id(0); \ + atom_or(mem, id); \ +} + +SIMPLE_TEST(long) +SIMPLE_TEST(ulong) + +THREADS_TEST(long) +THREADS_TEST(ulong) diff --git a/tests/cl/program/execute/builtin/atomic/atomic_int64_or-local.cl b/tests/cl/program/execute/builtin/atomic/atomic_int64_or-local.cl new file mode 100644 index 000000000..af23d2d18 --- /dev/null +++ b/tests/cl/program/execute/builtin/atomic/atomic_int64_or-local.cl @@ -0,0 +1,71 @@ +/*! +[config] +name: atom_int64_or local +clc_version_min: 10 +require_device_extensions: cl_khr_int64_extended_atomics + +[test] +name: simple long +kernel_name: simple_long +dimensions: 1 +global_size: 1 0 0 +local_size: 1 0 0 +arg_out: 0 buffer long[2] -4 -3 +arg_in: 1 buffer long[1] NULL +arg_in: 2 long -4 +arg_in: 3 long 5 + +[test] +name: simple ulong +kernel_name: simple_ulong +dimensions: 1 +global_size: 1 0 0 +local_size: 1 0 0 +arg_out: 0 buffer ulong[2] 4 5 +arg_in: 1 buffer ulong[1] NULL +arg_in: 2 ulong 4 +arg_in: 3 ulong 5 + +[test] +name: threads long +kernel_name: threads_long +dimensions: 1 +global_size: 8 0 0 +local_size: 8 0 0 +arg_out: 0 buffer long[1] 7 +arg_in: 1 buffer long[1] NULL + +[test] +name: threads ulong +kernel_name: threads_ulong +dimensions: 1 +global_size: 8 0 0 +local_size: 8 0 0 +arg_out: 0 buffer ulong[1] 7 +arg_in: 1 buffer ulong[1] NULL + +!*/ + +#define SIMPLE_TEST(TYPE) \ +kernel void simple_##TYPE(global TYPE *out, local TYPE *mem, TYPE initial, TYPE value) { \ + *mem = initial; \ + TYPE a = atom_or(mem, value); \ + out[0] = a; \ + out[1] = *mem; \ +} + +#define THREADS_TEST(TYPE) \ +kernel void threads_##TYPE(global TYPE *out, local TYPE *mem) { \ + *mem = 0; \ + barrier(CLK_LOCAL_MEM_FENCE); \ + TYPE id = get_local_id(0); \ + atom_or(mem, id); \ + barrier(CLK_LOCAL_MEM_FENCE); \ + *out = *mem; \ +} + +SIMPLE_TEST(long) +SIMPLE_TEST(ulong) + +THREADS_TEST(long) +THREADS_TEST(ulong) diff --git a/tests/cl/program/execute/builtin/atomic/atomic_int64_sub-global-return.cl b/tests/cl/program/execute/builtin/atomic/atomic_int64_sub-global-return.cl new file mode 100644 index 000000000..0790efd64 --- /dev/null +++ b/tests/cl/program/execute/builtin/atomic/atomic_int64_sub-global-return.cl @@ -0,0 +1,63 @@ +/*! +[config] +name: atom_int64_sub global, with usage of return variable +clc_version_min: 10 +require_device_extensions: cl_khr_int64_base_atomics + +[test] +name: simple long +kernel_name: simple_long +dimensions: 1 +global_size: 1 0 0 +local_size: 1 0 0 +arg_out: 0 buffer long[2] -6 -4 +arg_in: 0 buffer long[2] -4 0 + +[test] +name: simple ulong +kernel_name: simple_ulong +dimensions: 1 +global_size: 1 0 0 +local_size: 1 0 0 +arg_out: 0 buffer ulong[2] 1 3 +arg_in: 0 buffer ulong[2] 3 0 + +[test] +name: threads long +kernel_name: threads_long +dimensions: 1 +global_size: 8 0 0 +local_size: 8 0 0 +arg_out: 0 buffer long[18] 0 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 +arg_in: 0 buffer long[18] 28 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 + +[test] +name: threads ulong +kernel_name: threads_ulong +dimensions: 1 +global_size: 8 0 0 +local_size: 8 0 0 +arg_out: 0 buffer ulong[18] 0 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 +arg_in: 0 buffer ulong[18] 28 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 + +!*/ + +#define SIMPLE_TEST(TYPE) \ +kernel void simple_##TYPE(global TYPE *mem) { \ + mem[1] = atom_sub(mem, 2); \ +} + +#define THREADS_TEST(TYPE) \ +kernel void threads_##TYPE(global TYPE *mem) { \ + TYPE mul = mem[1]; \ + TYPE id = get_global_id(0); \ + TYPE ret = atom_sub(mem, id); \ + TYPE ret2 = atom_sub(&mem[(id+1)*2], id+ret*mul); \ + mem[(id+1)*2+1] = ret2; \ +} + +SIMPLE_TEST(long) +SIMPLE_TEST(ulong) + +THREADS_TEST(long) +THREADS_TEST(ulong) diff --git a/tests/cl/program/execute/builtin/atomic/atomic_int64_sub-global.cl b/tests/cl/program/execute/builtin/atomic/atomic_int64_sub-global.cl new file mode 100644 index 000000000..8abb3878b --- /dev/null +++ b/tests/cl/program/execute/builtin/atomic/atomic_int64_sub-global.cl @@ -0,0 +1,60 @@ +/*! +[config] +name: atom_int64_sub global, no usage of return variable +clc_version_min: 10 +require_device_extensions: cl_khr_int64_base_atomics + +[test] +name: simple long +kernel_name: simple_long +dimensions: 1 +global_size: 1 0 0 +local_size: 1 0 0 +arg_out: 0 buffer long[1] -6 +arg_in: 0 buffer long[1] -4 + +[test] +name: simple ulong +kernel_name: simple_ulong +dimensions: 1 +global_size: 1 0 0 +local_size: 1 0 0 +arg_out: 0 buffer ulong[1] 1 +arg_in: 0 buffer ulong[1] 3 + +[test] +name: threads long +kernel_name: threads_long +dimensions: 1 +global_size: 8 0 0 +local_size: 8 0 0 +arg_out: 0 buffer long[1] 0 +arg_in: 0 buffer long[1] 28 + +[test] +name: threads ulong +kernel_name: threads_ulong +dimensions: 1 +global_size: 8 0 0 +local_size: 8 0 0 +arg_out: 0 buffer ulong[1] 0 +arg_in: 0 buffer ulong[1] 28 + +!*/ + +#define SIMPLE_TEST(TYPE) \ +kernel void simple_##TYPE(global TYPE *mem) { \ + atom_sub(mem, 2); \ +} + +#define THREADS_TEST(TYPE) \ +kernel void threads_##TYPE(global TYPE *mem) { \ + TYPE id = get_global_id(0); \ + atom_sub(mem, id); \ +} + +SIMPLE_TEST(long) +SIMPLE_TEST(ulong) + +THREADS_TEST(long) +THREADS_TEST(ulong) diff --git a/tests/cl/program/execute/builtin/atomic/atomic_int64_sub-local.cl b/tests/cl/program/execute/builtin/atomic/atomic_int64_sub-local.cl new file mode 100644 index 000000000..68af98ef9 --- /dev/null +++ b/tests/cl/program/execute/builtin/atomic/atomic_int64_sub-local.cl @@ -0,0 +1,71 @@ +/*! +[config] +name: atom_int64_sub local +clc_version_min: 10 +require_device_extensions: cl_khr_int64_base_atomics + +[test] +name: simple long +kernel_name: simple_long +dimensions: 1 +global_size: 1 0 0 +local_size: 1 0 0 +arg_out: 0 buffer long[2] -4 -9 +arg_in: 1 buffer long[1] NULL +arg_in: 2 long -4 +arg_in: 3 long 5 + +[test] +name: simple ulong +kernel_name: simple_ulong +dimensions: 1 +global_size: 1 0 0 +local_size: 1 0 0 +arg_out: 0 buffer ulong[2] 5 1 +arg_in: 1 buffer ulong[1] NULL +arg_in: 2 ulong 5 +arg_in: 3 ulong 4 + +[test] +name: threads long +kernel_name: threads_long +dimensions: 1 +global_size: 8 0 0 +local_size: 8 0 0 +arg_out: 0 buffer long[1] 28 +arg_in: 1 buffer long[1] NULL + +[test] +name: threads ulong +kernel_name: threads_ulong +dimensions: 1 +global_size: 8 0 0 +local_size: 8 0 0 +arg_out: 0 buffer ulong[1] 28 +arg_in: 1 buffer ulong[1] NULL + +!*/ + +#define SIMPLE_TEST(TYPE) \ +kernel void simple_##TYPE(global TYPE *out, local TYPE *mem, TYPE initial, TYPE value) { \ + *mem = initial; \ + TYPE a = atom_sub(mem, value); \ + out[0] = a; \ + out[1] = *mem; \ +} + +#define THREADS_TEST(TYPE) \ +kernel void threads_##TYPE(global TYPE *out, local TYPE *mem) { \ + *mem = 56; \ + barrier(CLK_LOCAL_MEM_FENCE); \ + TYPE id = get_local_id(0); \ + atom_sub(mem, id); \ + barrier(CLK_LOCAL_MEM_FENCE); \ + *out = *mem; \ +} + +SIMPLE_TEST(long) +SIMPLE_TEST(ulong) + +THREADS_TEST(long) +THREADS_TEST(ulong) diff --git a/tests/cl/program/execute/builtin/atomic/atomic_int64_xchg-global-return.cl b/tests/cl/program/execute/builtin/atomic/atomic_int64_xchg-global-return.cl new file mode 100644 index 000000000..92e4f3301 --- /dev/null +++ b/tests/cl/program/execute/builtin/atomic/atomic_int64_xchg-global-return.cl @@ -0,0 +1,69 @@ +/*! +[config] +name: atom_int64_xchg global +clc_version_min: 10 +require_device_extensions: cl_khr_int64_base_atomics + +[test] +name: simple long +kernel_name: simple_long +dimensions: 1 +global_size: 1 0 0 +arg_out: 0 buffer long[2] -4 1 +arg_in: 0 buffer long[2] 1 0 +arg_in: 1 long -4 + +[test] +name: simple ulong +kernel_name: simple_ulong +dimensions: 1 +global_size: 1 0 0 +arg_out: 0 buffer long[2] 4 2 +arg_in: 0 buffer long[2] 2 0 +arg_in: 1 long 4 + +[test] +name: threads long +kernel_name: threads_long +dimensions: 1 +global_size: 8 0 0 +local_size: 8 0 0 +arg_out: 0 buffer long[1] 7 +arg_in: 0 buffer long[1] -1 +arg_out: 1 buffer long[8] -1 0 1 2 3 4 5 6 + +[test] +name: threads ulong +kernel_name: threads_ulong +dimensions: 1 +global_size: 8 0 0 +local_size: 8 0 0 +arg_out: 0 buffer ulong[1] 7 +arg_in: 0 buffer ulong[1] 9 +arg_out: 1 buffer long[8] 9 0 1 2 3 4 5 6 + +!*/ + +#define SIMPLE_TEST(TYPE) \ +kernel void simple_##TYPE(global TYPE *out, TYPE value) { \ + out[1] = atom_xchg(out, value); \ +} + +#define THREADS_TEST(TYPE) \ +kernel void threads_##TYPE(global TYPE *out, global TYPE *old) { \ + long i; \ + TYPE id = get_global_id(0); \ + barrier(CLK_GLOBAL_MEM_FENCE); \ + for(i = 0; i < get_global_size(0); i++){ \ + if (i == id){ \ + old[i] = atom_xchg(out, (TYPE)id); \ + } \ + barrier(CLK_GLOBAL_MEM_FENCE); \ + } \ +} + +SIMPLE_TEST(long) +SIMPLE_TEST(ulong) + +THREADS_TEST(long) +THREADS_TEST(ulong) diff --git a/tests/cl/program/execute/builtin/atomic/atomic_int64_xchg-global.cl b/tests/cl/program/execute/builtin/atomic/atomic_int64_xchg-global.cl new file mode 100644 index 000000000..8c7e4b1d6 --- /dev/null +++ b/tests/cl/program/execute/builtin/atomic/atomic_int64_xchg-global.cl @@ -0,0 +1,67 @@ +/*! +[config] +name: atom_int64_xchg global +clc_version_min: 10 +require_device_extensions: cl_khr_int64_base_atomics + +[test] +name: simple long +kernel_name: simple_long +dimensions: 1 +global_size: 1 0 0 +arg_out: 0 buffer long[1] -4 +arg_in: 0 buffer long[1] 1 +arg_in: 1 long -4 + +[test] +name: simple ulong +kernel_name: simple_ulong +dimensions: 1 +global_size: 1 0 0 +arg_out: 0 buffer long[1] 4 +arg_in: 0 buffer long[1] 2 +arg_in: 1 long 4 + +[test] +name: threads long +kernel_name: threads_long +dimensions: 1 +global_size: 8 0 0 +local_size: 8 0 0 +arg_out: 0 buffer long[1] 7 +arg_in: 0 buffer long[1] 0 + +[test] +name: threads ulong +kernel_name: threads_ulong +dimensions: 1 +global_size: 8 0 0 +local_size: 8 0 0 +arg_out: 0 buffer ulong[1] 7 +arg_in: 0 buffer ulong[1] 0 + +!*/ + +#define SIMPLE_TEST(TYPE) \ +kernel void simple_##TYPE(global TYPE *out, TYPE value) { \ + atom_xchg(out, value); \ +} + +#define THREADS_TEST(TYPE) \ +kernel void threads_##TYPE(global TYPE *out) { \ + long i; \ + TYPE id = get_global_id(0); \ + barrier(CLK_GLOBAL_MEM_FENCE); \ + for(i = 0; i < get_global_size(0); i++){ \ + if (i == id){ \ + atom_xchg(out, (TYPE)id); \ + } \ + barrier(CLK_GLOBAL_MEM_FENCE); \ + } \ +} + +SIMPLE_TEST(long) +SIMPLE_TEST(ulong) + +THREADS_TEST(long) +THREADS_TEST(ulong) diff --git a/tests/cl/program/execute/builtin/atomic/atomic_int64_xchg-local.cl b/tests/cl/program/execute/builtin/atomic/atomic_int64_xchg-local.cl new file mode 100644 index 000000000..8dcd0504c --- /dev/null +++ b/tests/cl/program/execute/builtin/atomic/atomic_int64_xchg-local.cl @@ -0,0 +1,76 @@ +/*! +[config] +name: atom_int64_xchg local +clc_version_min: 10 +require_device_extensions: cl_khr_int64_base_atomics + +[test] +name: simple long +kernel_name: simple_long +dimensions: 1 +global_size: 1 0 0 +local_size: 1 0 0 +arg_out: 0 buffer long[2] -4 5 +arg_in: 1 buffer long[1] NULL +arg_in: 2 long -4 +arg_in: 3 long 5 + +[test] +name: simple ulong +kernel_name: simple_ulong +dimensions: 1 +global_size: 1 0 0 +local_size: 1 0 0 +arg_out: 0 buffer ulong[2] 4 5 +arg_in: 1 buffer ulong[1] NULL +arg_in: 2 ulong 4 +arg_in: 3 ulong 5 + +[test] +name: threads long +kernel_name: threads_long +dimensions: 1 +global_size: 8 0 0 +local_size: 8 0 0 +arg_out: 0 buffer long[1] 7 +arg_in: 1 buffer long[1] NULL + +[test] +name: threads ulong +kernel_name: threads_ulong +dimensions: 1 +global_size: 8 0 0 +local_size: 8 0 0 +arg_out: 0 buffer ulong[1] 7 +arg_in: 1 buffer ulong[1] NULL + +!*/ + +#define SIMPLE_TEST(TYPE) \ +kernel void simple_##TYPE(global TYPE *out, local TYPE *mem, TYPE initial, TYPE value) { \ + *mem = initial; \ + TYPE a = atom_xchg(mem, value); \ + out[0] = a; \ + out[1] = *mem; \ +} + +#define THREADS_TEST(TYPE) \ +kernel void threads_##TYPE(global TYPE *out, local TYPE *mem) { \ + long i; \ + *mem = 0; \ + barrier(CLK_LOCAL_MEM_FENCE); \ + TYPE id = get_local_id(0); \ + for(i = 0; i < get_local_size(0); i++){ \ + if (i == id){ \ + atom_xchg(mem, (TYPE)id); \ + } \ + barrier(CLK_LOCAL_MEM_FENCE); \ + } \ + *out = *mem; \ +} + +SIMPLE_TEST(long) +SIMPLE_TEST(ulong) + +THREADS_TEST(long) +THREADS_TEST(ulong) diff --git a/tests/cl/program/execute/builtin/atomic/atomic_int64_xor-global-return.cl b/tests/cl/program/execute/builtin/atomic/atomic_int64_xor-global-return.cl new file mode 100644 index 000000000..a77b1e404 --- /dev/null +++ b/tests/cl/program/execute/builtin/atomic/atomic_int64_xor-global-return.cl @@ -0,0 +1,65 @@ +/*! +[config] +name: atom_int64_xor global, with usage of return variable +clc_version_min: 10 +require_device_extensions: cl_khr_int64_extended_atomics + +[test] +name: simple long +kernel_name: simple_long +dimensions: 1 +global_size: 1 0 0 +local_size: 1 0 0 +arg_out: 0 buffer long[2] -7 5 +arg_in: 0 buffer long[2] 5 0 +arg_in: 1 long -4 + +[test] +name: simple ulong +kernel_name: simple_ulong +dimensions: 1 +global_size: 1 0 0 +local_size: 1 0 0 +arg_out: 0 buffer ulong[2] 12 6 +arg_in: 0 buffer ulong[2] 6 0 +arg_in: 1 ulong 10 + +[test] +name: threads long +kernel_name: threads_long +dimensions: 1 +global_size: 8 0 0 +local_size: 8 0 0 +arg_out: 0 buffer long[18] 7 0 7 7 6 7 5 7 4 7 3 7 2 7 1 7 0 7 +arg_in: 0 buffer long[18] 7 0 7 0 7 0 7 0 7 0 7 0 7 0 7 0 7 0 + +[test] +name: threads ulong +kernel_name: threads_ulong +dimensions: 1 +global_size: 8 0 0 +local_size: 8 0 0 +arg_out: 0 buffer long[18] 7 0 7 7 6 7 5 7 4 7 3 7 2 7 1 7 0 7 +arg_in: 0 buffer long[18] 7 0 7 0 7 0 7 0 7 0 7 0 7 0 7 0 7 0 + +!*/ + +#define SIMPLE_TEST(TYPE) \ +kernel void simple_##TYPE(global TYPE *mem, TYPE value) { \ + mem[1] = atom_xor(mem, value); \ +} + +#define THREADS_TEST(TYPE) \ +kernel void threads_##TYPE(global TYPE *mem) { \ + TYPE mul = mem[1]; \ + TYPE id = get_global_id(0); \ + TYPE ret = atom_xor(mem, id); \ + TYPE ret2 = atom_xor(&mem[(id+1)*2], id+ret*mul); \ + mem[(id+1)*2+1] = ret2; \ +} + +SIMPLE_TEST(long) +SIMPLE_TEST(ulong) + +THREADS_TEST(long) +THREADS_TEST(ulong) diff --git a/tests/cl/program/execute/builtin/atomic/atomic_int64_xor-global.cl b/tests/cl/program/execute/builtin/atomic/atomic_int64_xor-global.cl new file mode 100644 index 000000000..47ad1b9cc --- /dev/null +++ b/tests/cl/program/execute/builtin/atomic/atomic_int64_xor-global.cl @@ -0,0 +1,62 @@ +/*! +[config] +name: atom_int64_xor global, no usage of return variable +clc_version_min: 10 +require_device_extensions: cl_khr_int64_extended_atomics + +[test] +name: simple long +kernel_name: simple_long +dimensions: 1 +global_size: 1 0 0 +local_size: 1 0 0 +arg_out: 0 buffer long[1] -7 +arg_in: 0 buffer long[1] 5 +arg_in: 1 long -4 + +[test] +name: simple ulong +kernel_name: simple_ulong +dimensions: 1 +global_size: 1 0 0 +local_size: 1 0 0 +arg_out: 0 buffer ulong[1] 12 +arg_in: 0 buffer ulong[1] 6 +arg_in: 1 ulong 10 + +[test] +name: threads long +kernel_name: threads_long +dimensions: 1 +global_size: 8 0 0 +local_size: 8 0 0 +arg_out: 0 buffer long[1] -7 +arg_in: 0 buffer long[1] -7 + +[test] +name: threads ulong +kernel_name: threads_ulong +dimensions: 1 +global_size: 8 0 0 +local_size: 8 0 0 +arg_out: 0 buffer ulong[1] 7 +arg_in: 0 buffer ulong[1] 7 + +!*/ + +#define SIMPLE_TEST(TYPE) \ +kernel void simple_##TYPE(global TYPE *mem, TYPE value) { \ + atom_xor(mem, value); \ +} + +#define THREADS_TEST(TYPE) \ +kernel void threads_##TYPE(global TYPE *mem) { \ + TYPE id = get_global_id(0); \ + atom_xor(mem, id); \ +} + +SIMPLE_TEST(long) +SIMPLE_TEST(ulong) + +THREADS_TEST(long) +THREADS_TEST(ulong) diff --git a/tests/cl/program/execute/builtin/atomic/atomic_int64_xor-local.cl b/tests/cl/program/execute/builtin/atomic/atomic_int64_xor-local.cl new file mode 100644 index 000000000..fda2b8064 --- /dev/null +++ b/tests/cl/program/execute/builtin/atomic/atomic_int64_xor-local.cl @@ -0,0 +1,72 @@ +/*! +[config] +name: atom_int64_xor local +clc_version_min: 10 +require_device_extensions: cl_khr_int64_extended_atomics + +[test] +name: simple long +kernel_name: simple_long +dimensions: 1 +global_size: 1 0 0 +local_size: 1 0 0 +#-4 = 1...11111100, 5 = 0...00000101, -4^5 = 11111001 +arg_out: 0 buffer long[2] -4 0xfffffffffffffff9 +arg_in: 1 buffer long[1] NULL +arg_in: 2 long -4 +arg_in: 3 long 5 + +[test] +name: simple ulong +kernel_name: simple_ulong +dimensions: 1 +global_size: 1 0 0 +local_size: 1 0 0 +arg_out: 0 buffer ulong[2] 4 1 +arg_in: 1 buffer ulong[1] NULL +arg_in: 2 ulong 4 +arg_in: 3 ulong 5 + +[test] +name: threads long +kernel_name: threads_long +dimensions: 1 +global_size: 8 0 0 +local_size: 8 0 0 +arg_out: 0 buffer long[1] 0 +arg_in: 1 buffer long[1] NULL + +[test] +name: threads ulong +kernel_name: threads_ulong +dimensions: 1 +global_size: 8 0 0 +local_size: 8 0 0 +arg_out: 0 buffer ulong[1] 0 +arg_in: 1 buffer ulong[1] NULL + +!*/ + +#define SIMPLE_TEST(TYPE) \ +kernel void simple_##TYPE(global TYPE *out, local TYPE *mem, TYPE initial, TYPE value) { \ + *mem = initial; \ + TYPE a = atom_xor(mem, value); \ + out[0] = a; \ + out[1] = *mem; \ +} + +#define THREADS_TEST(TYPE) \ +kernel void threads_##TYPE(global TYPE *out, local TYPE *mem) { \ + *mem = 0; \ + barrier(CLK_LOCAL_MEM_FENCE); \ + TYPE id = get_local_id(0); \ + atom_xor(mem, id); \ + barrier(CLK_LOCAL_MEM_FENCE); \ + *out = *mem; \ +} + +SIMPLE_TEST(long) +SIMPLE_TEST(ulong) + +THREADS_TEST(long) +THREADS_TEST(ulong) |