target-implicit-map-2.c 732 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. #include <stdlib.h>
  2. #define N 10
  3. struct S
  4. {
  5. int a, b;
  6. int *ptr;
  7. int c, d;
  8. };
  9. int
  10. main (void)
  11. {
  12. struct S a;
  13. a.ptr = (int *) malloc (sizeof (int) * N);
  14. for (int i = 0; i < N; i++)
  15. a.ptr[i] = 0;
  16. #pragma omp target enter data map(to: a.ptr, a.ptr[:N])
  17. #pragma omp target
  18. for (int i = 0; i < N; i++)
  19. a.ptr[i] += 1;
  20. #pragma omp target update from(a.ptr[:N])
  21. for (int i = 0; i < N; i++)
  22. if (a.ptr[i] != 1)
  23. abort ();
  24. #pragma omp target map(a.ptr[:N])
  25. for (int i = 0; i < N; i++)
  26. a.ptr[i] += 1;
  27. #pragma omp target update from(a.ptr[:N])
  28. for (int i = 0; i < N; i++)
  29. if (a.ptr[i] != 2)
  30. abort ();
  31. #pragma omp target exit data map(from:a.ptr, a.ptr[:N])
  32. return 0;
  33. }