$ cat hello.c #include #include int main( void) { #pragma omp parallel { int ID = omp_get_thread_num(); printf( "hello(%d) ",ID); #ifdef WAIT #pragma omp barrier // synchronize the threads #endif printf( "world(%d)\n",ID); } return 0; } $ make gcc -std=c11 -pedantic -Wall -fopenmp -o hello hello.c gcc -std=c11 -pedantic -Wall -fopenmp -o hello_wait -DWAIT hello.c $ lscpu | grep '^CPU(s)' CPU(s): 2 $ env | grep OMP $ ./hello hello(1) world(1) hello(0) world(0) $ ./hello_wait hello(0) hello(1) world(0) world(1) $ export OMP_NUM_THREADS=1 $ ./hello hello(0) world(0) $ export OMP_NUM_THREADS=4 $ ./hello hello(1) world(1) hello(3) world(3) hello(2) world(2) hello(0) world(0) $ ./hello_wait hello(1) hello(0) hello(2) hello(3) world(1) world(2) world(0) world(3) $ % cat loop.c #include #include int main( void) { #pragma omp parallel for for( int i = 0; i < 10; ++i) { int ID = omp_get_thread_num(); printf( "proc %d, i = %d\n", ID, i); } return 0; } $ make loop gcc -std=c11 -pedantic -Wall -fopenmp -o loop loop.c $ export OMP_NUM_THREADS=2 $ ./loop proc 1, i = 5 proc 1, i = 6 proc 1, i = 7 proc 1, i = 8 proc 1, i = 9 proc 0, i = 0 proc 0, i = 1 proc 0, i = 2 proc 0, i = 3 proc 0, i = 4 $ export OMP_NUM_THREADS=4 $ ./loop proc 0, i = 0 proc 0, i = 1 proc 0, i = 2 proc 1, i = 3 proc 1, i = 4 proc 1, i = 5 proc 3, i = 8 proc 3, i = 9 proc 2, i = 6 proc 2, i = 7 $