xref: /llvm-project/openmp/runtime/test/parallel/omp_nested.c (revision 154ac075cd04520a2b84c3503dd4590d90e233db)
1614c7ef8SJonathan Peyton // RUN: %libomp-compile-and-run
2614c7ef8SJonathan Peyton #include <stdio.h>
3614c7ef8SJonathan Peyton #include "omp_testsuite.h"
4614c7ef8SJonathan Peyton 
5614c7ef8SJonathan Peyton /*
6614c7ef8SJonathan Peyton  * Test if the compiler supports nested parallelism
7614c7ef8SJonathan Peyton  * By Chunhua Liao, University of Houston
8614c7ef8SJonathan Peyton  * Oct. 2005
9614c7ef8SJonathan Peyton  */
test_omp_nested()10614c7ef8SJonathan Peyton int test_omp_nested()
11614c7ef8SJonathan Peyton {
122bc3449dSHal Finkel #ifdef _OPENMP
132bc3449dSHal Finkel   if (omp_get_max_threads() > 4)
142bc3449dSHal Finkel     omp_set_num_threads(4);
1574f98554SAndrey Churbanov   if (omp_get_max_threads() < 2)
1674f98554SAndrey Churbanov     omp_set_num_threads(2);
172bc3449dSHal Finkel #endif
182bc3449dSHal Finkel 
19614c7ef8SJonathan Peyton   int counter = 0;
20614c7ef8SJonathan Peyton #ifdef _OPENMP
21614c7ef8SJonathan Peyton   omp_set_nested(1);
22*154ac075SJonathan Peyton   omp_set_max_active_levels(omp_get_supported_active_levels());
23614c7ef8SJonathan Peyton #endif
24614c7ef8SJonathan Peyton 
25614c7ef8SJonathan Peyton   #pragma omp parallel shared(counter)
26614c7ef8SJonathan Peyton   {
27614c7ef8SJonathan Peyton     #pragma omp critical
28614c7ef8SJonathan Peyton     counter++;
29614c7ef8SJonathan Peyton     #pragma omp parallel
30614c7ef8SJonathan Peyton     {
31614c7ef8SJonathan Peyton       #pragma omp critical
32614c7ef8SJonathan Peyton       counter--;
33614c7ef8SJonathan Peyton     }
34614c7ef8SJonathan Peyton   }
35614c7ef8SJonathan Peyton   return (counter != 0);
36614c7ef8SJonathan Peyton }
37614c7ef8SJonathan Peyton 
main()38614c7ef8SJonathan Peyton int main()
39614c7ef8SJonathan Peyton {
40614c7ef8SJonathan Peyton   int i;
41614c7ef8SJonathan Peyton   int num_failed=0;
42614c7ef8SJonathan Peyton 
43614c7ef8SJonathan Peyton   for(i = 0; i < REPETITIONS; i++) {
44614c7ef8SJonathan Peyton     if(!test_omp_nested()) {
45614c7ef8SJonathan Peyton       num_failed++;
46614c7ef8SJonathan Peyton     }
47614c7ef8SJonathan Peyton   }
48614c7ef8SJonathan Peyton   return num_failed;
49614c7ef8SJonathan Peyton }
50