1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
|
// RUN: %libomptarget-compile-run-and-check-generic
// REQUIRES: libc
#include <stdio.h>
#include <stdlib.h>
#pragma omp declare target to(malloc)
#pragma omp declare target to(free)
int main() {
unsigned h_x;
unsigned *d_x;
#pragma omp target map(from : d_x)
{
d_x = (unsigned *)malloc(sizeof(unsigned));
*d_x = 1;
}
#pragma omp target is_device_ptr(d_x) map(from : h_x)
{ h_x = *d_x; }
#pragma omp target is_device_ptr(d_x)
{ free(d_x); }
#pragma omp target teams num_teams(64)
#pragma omp parallel num_threads(32)
{
int *ptr = (int *)malloc(sizeof(int));
*ptr = 42;
free(ptr);
}
// CHECK: PASS
if (h_x == 1)
fputs("PASS\n", stdout);
}
|