To asi záleží jestli potřebujete paralelismus rychle a jednoduše, nebo jste ochotný si to udělat sám efektivněji.
Navíc omp neumí jen hloupé rozbalování smyček ale i má nástroje na synchronizaci a něco jako vlastní obal vláken a mutexů. A kdo ví co dalšího.
Zde jednoduchá ukázka vláken
void mujprint(int k){ usleep(k * 1000); printf("%d\n", k); } int main (int argc, char** argv){ #pragma omp parallel //paralelní sekce { #pragma omp master //pouze vlákno 0 { mujprint(5); #pragma omp task //spawn tasku mujprint(4); #pragma omp task mujprint(3); #pragma omp task mujprint(2); #pragma omp taskwait //počká na všechny tasky mujprint(1); } } return 0; }
Výstup toho to programu je při kompilaci s -fopenmp
5 2 3 4 1
a s vypnutým OpenMP
5 4 3 2 1
Další výhodou použití OpenMP je možnost si zvoli při kompilaci jestli poběží paralelně, nebo ne. Bez přepínače -fopenmp se omp makra ignorují.