Descomposició de tasques · 3.3
Instruccions bàsiques d'OpenMP
Les directives que faràs servir sempre: parallel, single, task i taskloop per crear tasques, i taskwait i taskgroup per esperar-les.
Conceptes clau
parallelisingletaskitaskloopgrainsize(m)inum_tasks(m)taskwaitvstaskgroup
Creació de tasques:
#pragma omp parallel [num_threads(N)]: crea tasques implícites (una per thread). Inclou una barrera implícita al final. Opcionalment podem usarnum_threads(N)per especificar el nombre de threads.#pragma omp single: només un thread executa el bloc; la resta esperen tasques a la pool. Inclou una barrera implícita al final (eliminable ambnowait).#pragma omp task: crea una tasca explícita que s’afegeix a la pool i s’executarà quan un thread estigui disponible. Opcionalment podem usardepend(in/out: var)per establir dependències entre tasques.#pragma omp taskloop: crea tasques explícites a partir de les iteracions d’unforcomptable. Inclou un taskgroup implícit al final. Es pot controlar la granularitat amb:grainsize(m): entre i iteracions per tasca.num_tasks(m): aproximadament tasques creades.
Barreres de tasques:
#pragma omp taskwait: suspèn la tasca actual fins que totes les seves tasques filles directes hagin acabat. No espera descendents de nivells més profunds.#pragma omp taskgroup: suspèn la tasca actual al final del bloc, esperant totes les tasques filles i tots els seus descendents.