#include <stdio.h>

#ifdef _OPENMP
    #include <omp.h>
#endif

void print_omp_info(const int i) {
  #pragma omp critical
  printf("%i/%i  i = %i\n", omp_get_thread_num(), omp_get_num_threads(), i);
}

int main(int argc, char *argv[]) {
    #ifdef _OPENMP
        int i;
        printf("paralle for without schedule parameter:\n");
        #pragma omp parallel for
        for(i = 0; i < 10; i++) 
            print_omp_info(i);

/*

paralle for without schedule parameter:
0/2  i = 0
0/2  i = 1
0/2  i = 2
0/2  i = 3
0/2  i = 4
1/2  i = 5
1/2  i = 6
1/2  i = 7
1/2  i = 8
1/2  i = 9

*/

        printf("parallel for with schedule(static, 1):\n");
        #pragma omp parallel for schedule(static, 1)
        for(i = 0; i < 10; i++)
            print_omp_info(i);

/*

parallel for with schedule(static, 1):
1/2  i = 1
1/2  i = 3
1/2  i = 5
1/2  i = 7
1/2  i = 9
0/2  i = 0
0/2  i = 2
0/2  i = 4
0/2  i = 6
0/2  i = 8

*/

        printf("parallel for schedule(dynamic, 1):\n");
        #pragma omp parallel for schedule(dynamic, 1)
        for(i = 0; i < 10; i++)
            print_omp_info(i);

/*

parallel for schedule(dynamic, 1):
0/2  i = 0
0/2  i = 2
0/2  i = 3
0/2  i = 4
0/2  i = 5
1/2  i = 1
0/2  i = 6
1/2  i = 7
1/2  i = 9
0/2  i = 8

*/

    #else
        printf("No OpenMP support\n");
    #endif

    return 0;
}