Ir al contenido

Repaso OpenMP — chuleta y flashcards

Directiva¿Qué hace?¿Barrera al final?¿Acepta cláusulas?
parallelcrea el equipo de hilos (fork)sí (join)if, num_threads, private, firstprivate, shared, default, reduction, copyin
forreparte iteracionessí, salvo nowaitprivate, firstprivate, lastprivate, reduction, schedule, collapse, ordered, nowait
sections / sectionreparte bloques distintossí, salvo nowaitprivate, firstprivate, lastprivate, reduction, nowait
singleun hilo cualquierasí, salvo nowaitprivate, firstprivate, copyprivate, nowait
mastersolo el hilo 0noninguna
critical [(nombre)]uno a la veznoninguna
atomic [read|write|update|capture]una actualización indivisiblenoninguna
barriertodos esperan—ninguna
ordereden 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
taskunidad de trabajo diferibleno (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.

  1. Variable compartida que debía ser privada (el id de Ejemp01, la r de Ejemp03_critical) ⇒ condición de carrera.
  2. private sin inicializar: la copia empieza con basura (usa firstprivate si necesitas el valor original).
  3. critical dentro del bucle cuando bastaba acumular en privado y proteger una vez al final (o usar reduction).
  4. Inicializar la variable de reduction con master sin barrera (lámina 24 de U4.2).
  5. nowait entre bucles dependientes con un schedule que no garantiza el mismo reparto (solo es seguro con static y las mismas iteraciones).
  6. Dos parallel anidados por accidente (Ejemp06): cada hilo externo repite todo el bucle.

¿Qué imprime? (4 hilos)

0/6 correctas · 0 respondidas
1. 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

dominadas 0/42

Fuente ·U4.1–U4.3 Paralelismo compartido-OMP.pdf · semana_9/*.cpp · semana_9/sesionb/*