Listing 1: OpenMP enables parallelization of loops or regions without large-scale code modifications.
//-- Avoid overhead by entering a parallel section once, then dividing the // work within the parallel section. #pragma omp parallel { //-- Only the master thread executes the following function call #pragma omp master MasterThreadFunc(); //-- The threads that process this loop continue immediately to the next // block without waiting for all threads to finish this loop #pragma omp for nowait for( i = 0; i < X; i++ ) { doWork(); // ... } //-- Any thread may excute this; generally it is likely to be the first // thread to complete its work from the above loop #pragma omp single OneTimeAnyThreadFunc(); //-- The threads that process this loop will synchronize at the end of // the loop before continuing execution #pragma omp for for( i = 0; i < Y; i++ ) { doOtherWork(); // ... } //-- Sections instruct OpenMP to divide the identified sections across // the multiple threads. #pragma omp sections { // These sections are divided among the threads, causing each to be // executed exactly once, and in parallel with the other. If the // program contains more sections than threads, the remaining // sections will be scheduled as threads finish their previously // assigned sections. #pragma omp section { doTaskA(); } #pragma omp section { doTaskB(); } #pragma omp section { doTaskC(); } } }