cancel-parallel-1.c 717 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. /* { dg-do run } */
  2. /* { dg-set-target-env-var OMP_CANCELLATION "true" } */
  3. #include <stdlib.h>
  4. #include <omp.h>
  5. int
  6. main ()
  7. {
  8. int a[64];
  9. #pragma omp parallel
  10. {
  11. #pragma omp barrier
  12. if (omp_get_thread_num () == 0)
  13. {
  14. #pragma omp cancel parallel
  15. }
  16. #pragma omp for
  17. for (int i = 0; i < 64; i++)
  18. a[i] = i;
  19. if (omp_get_cancellation ())
  20. abort ();
  21. }
  22. #pragma omp parallel
  23. {
  24. #pragma omp barrier
  25. if (omp_get_thread_num () == 0)
  26. {
  27. #pragma omp cancel parallel
  28. }
  29. #pragma omp taskgroup
  30. {
  31. #pragma omp for
  32. for (int i = 0; i < 64; i++)
  33. #pragma omp task
  34. a[i] += i;
  35. if (omp_get_cancellation ())
  36. abort ();
  37. }
  38. }
  39. return 0;
  40. }