xref: /llvm-project/openmp/runtime/test/api/omp_pause_resource.c (revision 047890bc3f922e9ffdc5210577d14a4de63ed944)
19b8bb323SJonathan Peyton // RUN: %libomp-compile-and-run
2*047890bcSJoachim Protze 
3*047890bcSJoachim Protze // Linking fails for icc 18/19
4*047890bcSJoachim Protze // UNSUPPORTED: icc-18, icc-19
5*047890bcSJoachim Protze 
69b8bb323SJonathan Peyton #include <stdio.h>
79b8bb323SJonathan Peyton #include "omp_testsuite.h"
89b8bb323SJonathan Peyton 
test_omp_pause_resource()99b8bb323SJonathan Peyton int test_omp_pause_resource() {
109b8bb323SJonathan Peyton   int fails, nthreads, my_dev;
119b8bb323SJonathan Peyton 
129b8bb323SJonathan Peyton   fails = 0;
139b8bb323SJonathan Peyton   nthreads = 0;
149b8bb323SJonathan Peyton   my_dev = omp_get_initial_device();
159b8bb323SJonathan Peyton 
169b8bb323SJonathan Peyton #pragma omp parallel
179b8bb323SJonathan Peyton #pragma omp single
189b8bb323SJonathan Peyton   nthreads = omp_get_num_threads();
199b8bb323SJonathan Peyton 
209b8bb323SJonathan Peyton   if (omp_pause_resource(omp_pause_soft, my_dev))
219b8bb323SJonathan Peyton     fails++;
229b8bb323SJonathan Peyton 
239b8bb323SJonathan Peyton #pragma omp parallel shared(nthreads)
249b8bb323SJonathan Peyton #pragma omp single
259b8bb323SJonathan Peyton   nthreads = omp_get_num_threads();
269b8bb323SJonathan Peyton 
279b8bb323SJonathan Peyton   if (nthreads == 0)
289b8bb323SJonathan Peyton     fails++;
299b8bb323SJonathan Peyton   if (omp_pause_resource(omp_pause_hard, my_dev))
309b8bb323SJonathan Peyton     fails++;
319b8bb323SJonathan Peyton   nthreads = 0;
329b8bb323SJonathan Peyton 
339b8bb323SJonathan Peyton #pragma omp parallel shared(nthreads)
349b8bb323SJonathan Peyton #pragma omp single
359b8bb323SJonathan Peyton   nthreads = omp_get_num_threads();
369b8bb323SJonathan Peyton 
379b8bb323SJonathan Peyton   if (nthreads == 0)
389b8bb323SJonathan Peyton     fails++;
399b8bb323SJonathan Peyton   if (omp_pause_resource_all(omp_pause_soft))
409b8bb323SJonathan Peyton     fails++;
419b8bb323SJonathan Peyton   nthreads = 0;
429b8bb323SJonathan Peyton 
439b8bb323SJonathan Peyton #pragma omp parallel shared(nthreads)
449b8bb323SJonathan Peyton #pragma omp single
459b8bb323SJonathan Peyton   nthreads = omp_get_num_threads();
469b8bb323SJonathan Peyton 
479b8bb323SJonathan Peyton   if (nthreads == 0)
489b8bb323SJonathan Peyton     fails++;
499b8bb323SJonathan Peyton   return fails == 0;
509b8bb323SJonathan Peyton }
519b8bb323SJonathan Peyton 
main()529b8bb323SJonathan Peyton int main() {
539b8bb323SJonathan Peyton   int i;
549b8bb323SJonathan Peyton   int num_failed = 0;
559b8bb323SJonathan Peyton 
569b8bb323SJonathan Peyton   for (i = 0; i < REPETITIONS; i++) {
579b8bb323SJonathan Peyton     if (!test_omp_pause_resource()) {
589b8bb323SJonathan Peyton       num_failed++;
599b8bb323SJonathan Peyton     }
609b8bb323SJonathan Peyton   }
619b8bb323SJonathan Peyton   return num_failed;
629b8bb323SJonathan Peyton }
63