target-24.c 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. #include <omp.h>
  2. #include <stdlib.h>
  3. int
  4. main ()
  5. {
  6. int d = omp_get_default_device ();
  7. int id = omp_get_initial_device ();
  8. if (d < 0 || d >= omp_get_num_devices ())
  9. d = id;
  10. int a[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
  11. int *b = a;
  12. int shared_mem = 0;
  13. #pragma omp target map (alloc: shared_mem)
  14. shared_mem = 1;
  15. if (omp_target_is_present (b, d) != shared_mem)
  16. abort ();
  17. #pragma omp target enter data map (to: a)
  18. if (omp_target_is_present (b, d) == 0)
  19. abort ();
  20. #pragma omp target enter data map (alloc: b[:0])
  21. if (omp_target_is_present (b, d) == 0)
  22. abort ();
  23. #pragma omp target exit data map (release: b[:0])
  24. if (omp_target_is_present (b, d) == 0)
  25. abort ();
  26. #pragma omp target exit data map (release: b[:0])
  27. if (omp_target_is_present (b, d) != shared_mem)
  28. abort ();
  29. #pragma omp target enter data map (to: a)
  30. if (omp_target_is_present (b, d) == 0)
  31. abort ();
  32. #pragma omp target enter data map (always, to: b[:0])
  33. if (omp_target_is_present (b, d) == 0)
  34. abort ();
  35. #pragma omp target exit data map (delete: b[:0])
  36. if (omp_target_is_present (b, d) != shared_mem)
  37. abort ();
  38. #pragma omp target exit data map (from: b[:0])
  39. return 0;
  40. }