xref: /llvm-project/openmp/runtime/test/api/omp_get_num_threads.c (revision 373107699709f6fb06992bf6b76274091570aaf2)
1*614c7ef8SJonathan Peyton // RUN: %libomp-compile-and-run
2*614c7ef8SJonathan Peyton #include <stdio.h>
3*614c7ef8SJonathan Peyton #include "omp_testsuite.h"
4*614c7ef8SJonathan Peyton 
test_omp_get_num_threads()5*614c7ef8SJonathan Peyton int test_omp_get_num_threads()
6*614c7ef8SJonathan Peyton {
7*614c7ef8SJonathan Peyton   /* checks that omp_get_num_threads is equal to the number of
8*614c7ef8SJonathan Peyton      threads */
9*614c7ef8SJonathan Peyton   int nthreads_lib;
10*614c7ef8SJonathan Peyton   int nthreads = 0;
11*614c7ef8SJonathan Peyton 
12*614c7ef8SJonathan Peyton   nthreads_lib = -1;
13*614c7ef8SJonathan Peyton 
14*614c7ef8SJonathan Peyton   #pragma omp parallel
15*614c7ef8SJonathan Peyton   {
16*614c7ef8SJonathan Peyton     #pragma omp critical
17*614c7ef8SJonathan Peyton     {
18*614c7ef8SJonathan Peyton       nthreads++;
19*614c7ef8SJonathan Peyton     } /* end of critical */
20*614c7ef8SJonathan Peyton     #pragma omp single
21*614c7ef8SJonathan Peyton     {
22*614c7ef8SJonathan Peyton       nthreads_lib = omp_get_num_threads ();
23*614c7ef8SJonathan Peyton     }  /* end of single */
24*614c7ef8SJonathan Peyton   } /* end of parallel */
25*614c7ef8SJonathan Peyton   return (nthreads == nthreads_lib);
26*614c7ef8SJonathan Peyton }
27*614c7ef8SJonathan Peyton 
main()28*614c7ef8SJonathan Peyton int main()
29*614c7ef8SJonathan Peyton {
30*614c7ef8SJonathan Peyton   int i;
31*614c7ef8SJonathan Peyton   int num_failed=0;
32*614c7ef8SJonathan Peyton 
33*614c7ef8SJonathan Peyton   for(i = 0; i < REPETITIONS; i++) {
34*614c7ef8SJonathan Peyton     if(!test_omp_get_num_threads()) {
35*614c7ef8SJonathan Peyton       num_failed++;
36*614c7ef8SJonathan Peyton     }
37*614c7ef8SJonathan Peyton   }
38*614c7ef8SJonathan Peyton   return num_failed;
39*614c7ef8SJonathan Peyton }
40