1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- /* { dg-do run } */
- /* { dg-set-target-env-var OMP_THREAD_LIMIT "9" } */
- #include <stdlib.h>
- #include <unistd.h>
- #include <omp.h>
- int
- main ()
- {
- if (omp_get_thread_limit () != 9)
- return 0;
- omp_set_dynamic (0);
- #pragma omp parallel num_threads (8)
- if (omp_get_num_threads () != 8)
- abort ();
- #pragma omp parallel num_threads (16)
- if (omp_get_num_threads () > 9)
- abort ();
- #pragma omp target if (0)
- #pragma omp teams thread_limit (6)
- {
- if (omp_get_thread_limit () > 6)
- abort ();
- if (omp_get_thread_limit () == 6)
- {
- omp_set_dynamic (0);
- omp_set_nested (1);
- #pragma omp parallel num_threads (3)
- if (omp_get_num_threads () != 3)
- abort ();
- #pragma omp parallel num_threads (3)
- if (omp_get_num_threads () != 3)
- abort ();
- #pragma omp parallel num_threads (8)
- if (omp_get_num_threads () > 6)
- abort ();
- #pragma omp parallel num_threads (6)
- if (omp_get_num_threads () != 6)
- abort ();
- int cnt = 0;
- #pragma omp parallel num_threads (5)
- #pragma omp parallel num_threads (5)
- #pragma omp parallel num_threads (2)
- {
- int v;
- #pragma omp atomic capture
- v = ++cnt;
- if (v > 6)
- abort ();
- usleep (10000);
- #pragma omp atomic
- --cnt;
- }
- }
- }
- return 0;
- }
|