diff options
Diffstat (limited to 'offload/test/offloading/memory_manager.cpp')
| -rw-r--r-- | offload/test/offloading/memory_manager.cpp | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/offload/test/offloading/memory_manager.cpp b/offload/test/offloading/memory_manager.cpp new file mode 100644 index 000000000000..ac437c53521c --- /dev/null +++ b/offload/test/offloading/memory_manager.cpp @@ -0,0 +1,46 @@ +// RUN: %libomptarget-compilexx-run-and-check-generic + +// UNSUPPORTED: amdgcn-amd-amdhsa +// UNSUPPORTED: x86_64-pc-linux-gnu +// UNSUPPORTED: x86_64-pc-linux-gnu-LTO + +#include <omp.h> + +#include <cassert> +#include <iostream> + +int main(int argc, char *argv[]) { +#pragma omp parallel for + for (int i = 0; i < 16; ++i) { + for (int n = 1; n < (1 << 13); n <<= 1) { + void *p = omp_target_alloc(n * sizeof(int), 0); + omp_target_free(p, 0); + } + } + +#pragma omp parallel for + for (int i = 0; i < 16; ++i) { + for (int n = 1; n < (1 << 13); n <<= 1) { + int *p = (int *)omp_target_alloc(n * sizeof(int), 0); +#pragma omp target teams distribute parallel for is_device_ptr(p) + for (int j = 0; j < n; ++j) { + p[j] = i; + } + int buffer[n]; +#pragma omp target teams distribute parallel for is_device_ptr(p) \ + map(from : buffer) + for (int j = 0; j < n; ++j) { + buffer[j] = p[j]; + } + for (int j = 0; j < n; ++j) { + assert(buffer[j] == i); + } + omp_target_free(p, 0); + } + } + + std::cout << "PASS\n"; + return 0; +} + +// CHECK: PASS |
