Repaso OpenMP — chuleta y flashcards
Chuleta de directivas
Sección titulada «Chuleta de directivas»| Directiva | ¿Qué hace? | ¿Barrera al final? | ¿Acepta cláusulas? |
|---|---|---|---|
parallel | crea el equipo de hilos (fork) | sí (join) | if, num_threads, private, firstprivate, shared, default, reduction, copyin |
for | reparte iteraciones | sí, salvo nowait | private, firstprivate, lastprivate, reduction, schedule, collapse, ordered, nowait |
sections / section | reparte bloques distintos | sí, salvo nowait | private, firstprivate, lastprivate, reduction, nowait |
single | un hilo cualquiera | sí, salvo nowait | private, firstprivate, copyprivate, nowait |
master | solo el hilo 0 | no | ninguna |
critical [(nombre)] | uno a la vez | no | ninguna |
atomic [read|write|update|capture] | una actualización indivisible | no | ninguna |
barrier | todos esperan | — | ninguna |
ordered | en orden secuencial dentro de un for ordered | — | ninguna |
flush [(lista)] | sincroniza la vista de memoria | — | ninguna |
threadprivate(lista) | global con copia persistente por hilo | — | ninguna |
task | unidad de trabajo diferible | no (usa taskwait/taskgroup) | private, firstprivate, shared, default, if, untied, depend |
Según U4.1, las directivas que no aceptan cláusulas son: master, critical, barrier, atomic, flush, ordered, threadprivate.
Los 6 errores que más se repiten
Sección titulada «Los 6 errores que más se repiten»- Variable compartida que debía ser privada (el
idde Ejemp01, larde Ejemp03_critical) ⇒ condición de carrera. privatesin inicializar: la copia empieza con basura (usafirstprivatesi necesitas el valor original).criticaldentro del bucle cuando bastaba acumular en privado y proteger una vez al final (o usarreduction).- Inicializar la variable de
reductionconmastersin barrera (lámina 24 de U4.2). nowaitentre bucles dependientes con unscheduleque no garantiza el mismo reparto (solo es seguro constaticy las mismas iteraciones).- Dos
parallelanidados por accidente (Ejemp06): cada hilo externo repite todo el bucle.
¿Qué imprime? (4 hilos)
0/6 correctas · 0 respondidas1.
int i=1, j=2; y #pragma omp parallel firstprivate(i,j) { i=3; j=j+2; printf("%d %d ", i, j); } y luego printf("| %d %d", i, j);2.
#pragma omp parallel + #pragma omp single nowait { b[omp_get_thread_num()] = 10; }, con b inicial en −1. Después…3. 16 iteraciones,
schedule(static), 4 hilos. ¿Qué iteraciones hace el hilo 1?4.
int x=0; #pragma omp parallel for reduction(+:x) sobre i = 1…10 con x += i;5.
#pragma omp for collapse(2) lastprivate(jl, kl) con k=1..2, j=1..3; luego printf("%d %d", kl, jl)6. Tareas:
depend(out:x) x=2; luego depend(in:x) printf(x), con x = 1 al inicio.Flashcards de OpenMP
Sección titulada «Flashcards de OpenMP»Flashcards
dominadas 0/42Fuente ·U4.1–U4.3 Paralelismo compartido-OMP.pdf · semana_9/*.cpp · semana_9/sesionb/*