#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; }