xref: /llvm-project/openmp/libompd/test/openmp_examples/nested.c (revision 1099498e3f35b2ad4b021ba3888b590259124e74)
1*1099498eSVignesh Balasubramanian // RUN: %gdb-compile 2>&1 | tee %t.compile
2*1099498eSVignesh Balasubramanian // RUN: env OMP_SCHEDULE=guided,10 %gdb-run 2>&1 | tee %t.out | FileCheck %s
3*1099498eSVignesh Balasubramanian 
4*1099498eSVignesh Balasubramanian #include "../ompt_plugin.h"
5*1099498eSVignesh Balasubramanian #include <omp.h>
6*1099498eSVignesh Balasubramanian #include <stdio.h>
7*1099498eSVignesh Balasubramanian #include <unistd.h>
8*1099498eSVignesh Balasubramanian 
main()9*1099498eSVignesh Balasubramanian int main() {
10*1099498eSVignesh Balasubramanian   printf("Application: Process %d started.\n", getpid());
11*1099498eSVignesh Balasubramanian 
12*1099498eSVignesh Balasubramanian   int i;
13*1099498eSVignesh Balasubramanian   omp_set_num_threads(3);
14*1099498eSVignesh Balasubramanian   omp_set_max_active_levels(10);
15*1099498eSVignesh Balasubramanian 
16*1099498eSVignesh Balasubramanian #pragma omp parallel // parallel region begins
17*1099498eSVignesh Balasubramanian   {
18*1099498eSVignesh Balasubramanian     printf("outer parallel region Thread ID == %d\n", omp_get_thread_num());
19*1099498eSVignesh Balasubramanian     /* Code for work to be done by outer parallel region threads over here. */
20*1099498eSVignesh Balasubramanian 
21*1099498eSVignesh Balasubramanian     if (omp_get_thread_num() == 2)
22*1099498eSVignesh Balasubramanian       sleep(1);
23*1099498eSVignesh Balasubramanian 
24*1099498eSVignesh Balasubramanian #pragma omp parallel num_threads(2) // nested parallel region
25*1099498eSVignesh Balasubramanian     {
26*1099498eSVignesh Balasubramanian       /* Code for work to be done by inner parallel region threads over here. */
27*1099498eSVignesh Balasubramanian       printf("inner parallel region thread id %d\n", omp_get_thread_num());
28*1099498eSVignesh Balasubramanian 
29*1099498eSVignesh Balasubramanian       // if (omp_get_thread_num() == 1) sleep(1000);
30*1099498eSVignesh Balasubramanian 
31*1099498eSVignesh Balasubramanian #pragma omp parallel num_threads(2) //
32*1099498eSVignesh Balasubramanian       {
33*1099498eSVignesh Balasubramanian 
34*1099498eSVignesh Balasubramanian #pragma omp for
35*1099498eSVignesh Balasubramanian         for (i = 0; i < 20; i++) {
36*1099498eSVignesh Balasubramanian           // Some independent iterative computation to be done.
37*1099498eSVignesh Balasubramanian           printf("");
38*1099498eSVignesh Balasubramanian           ompd_tool_test(0);
39*1099498eSVignesh Balasubramanian         }
40*1099498eSVignesh Balasubramanian       }
41*1099498eSVignesh Balasubramanian     }
42*1099498eSVignesh Balasubramanian   }
43*1099498eSVignesh Balasubramanian 
44*1099498eSVignesh Balasubramanian   // sleep(1000);
45*1099498eSVignesh Balasubramanian 
46*1099498eSVignesh Balasubramanian   return 0;
47*1099498eSVignesh Balasubramanian }
48*1099498eSVignesh Balasubramanian 
49*1099498eSVignesh Balasubramanian // CHECK-NOT: OMPT-OMPD mismatch
50*1099498eSVignesh Balasubramanian // CHECK-NOT: Python Exception
51*1099498eSVignesh Balasubramanian // CHECK-NOT: The program is not being run.
52