43 lines · cpp
1// RUN: %libomptarget-compilexx-run-and-check-generic2 3#include <omp.h>4 5#include <cassert>6#include <iostream>7 8int main(int argc, char *argv[]) {9#pragma omp parallel for10 for (int i = 0; i < 16; ++i) {11 for (int n = 1; n < (1 << 13); n <<= 1) {12 void *p = omp_target_alloc(n * sizeof(int), 0);13 omp_target_free(p, 0);14 }15 }16 17#pragma omp parallel for18 for (int i = 0; i < 16; ++i) {19 for (int n = 1; n < (1 << 13); n <<= 1) {20 int *p = (int *)omp_target_alloc(n * sizeof(int), 0);21#pragma omp target teams distribute parallel for is_device_ptr(p)22 for (int j = 0; j < n; ++j) {23 p[j] = i;24 }25 int buffer[n];26#pragma omp target teams distribute parallel for is_device_ptr(p) \27 map(from : buffer)28 for (int j = 0; j < n; ++j) {29 buffer[j] = p[j];30 }31 for (int j = 0; j < n; ++j) {32 assert(buffer[j] == i);33 }34 omp_target_free(p, 0);35 }36 }37 38 std::cout << "PASS\n";39 return 0;40}41 42// CHECK: PASS43