Saltar a contenido

Solución - Segundo Examen Parcial


Pregunta 1 - Intercalación de hilos y no determinismo

Escenario: el hilo X imprime p1, p2; el hilo Y imprime q1, q2. ¿Qué salidas son posibles?

Respuestas correctas: A, C, D

Opción Correcta Análisis
A Correcta El hilo X corre completo y luego el Y: ejecución válida sin intercalación.
B Incorrecta q2 aparece antes que q1: viola el orden de programa del hilo Y.
C Correcta Intercalación válida: respeta p1 antes de p2 y q1 antes de q2.
D Correcta El hilo Y corre completo y luego el X: ejecución válida.
E Incorrecta q2 aparece antes que q1: viola el orden de programa del hilo Y.

Pregunta 2 - Garantías de join

Escenario: un hilo t llena un arreglo datos; el principal hace start, join y luego lo usa.

Respuestas correctas: A, C

Opción Correcta Análisis
A Correcta join garantiza que, al continuar, el hilo principal ve el arreglo completamente lleno.
B Incorrecta join no reparte el llenado ni lo acelera; solo espera la terminación de t.
C Correcta Sin join, el hilo principal podría usar datos cuando t aún no terminó.
D Incorrecta Sin join no hay un error garantizado; el comportamiento es no determinista.
E Incorrecta join puede invocarse las veces que haga falta.

Pregunta 3 - Condición de carrera y atomicidad

Escenario: dos hilos actualizan muchas veces un total compartido, sin sincronización.

Respuestas correctas: B, D, E

Opción Correcta Análisis
A Incorrecta La conmutatividad no salva: leer-sumar-escribir no es una operación atómica.
B Correcta Actualización perdida: dos hilos leen el mismo total y uno se descarta al escribir.
C Incorrecta Con val no se podría actualizar el total; no corrige la carrera conservando el comportamiento.
D Correcta El total final depende de la intercalación: el resultado es no determinista.
E Correcta synchronized sobre un objeto común vuelve atómica la actualización.

Pregunta 4 - Interbloqueo

Escenario: dos hilos bloquean dos cuentas en orden opuesto.

Respuestas correctas: B, C

Opción Correcta Análisis
A Incorrecta Aunque sean cuentas distintas, los candados se piden en orden opuesto: sí puede haber interbloqueo.
B Correcta Cada hilo espera el candado que retiene el otro: ambos quedan bloqueados.
C Correcta Un orden fijo de adquisición de candados rompe el ciclo de espera.
D Incorrecta La JVM no detecta el interbloqueo ni reinicia hilos.
E Incorrecta El interbloqueo cuelga el programa; no lo termina con un error.

Pregunta 5 - Trabajo y profundidad

Escenario: máximo de n elementos, versión lineal frente a divide y vencerás con parallel.

Respuestas correctas: B, D, E

Opción Correcta Análisis
A Incorrecta La versión 2 reduce la profundidad, no el trabajo.
B Correcta Ambas recorren los n elementos: W(n) = O(n).
C Incorrecta Con un procesador no hay paralelismo; el tiempo lo fija el trabajo.
D Correcta La versión lineal encadena las comparaciones: D(n) = O(n).
E Correcta Dividir por la mitad con parallel da profundidad O(log n).

Pregunta 6 - Ley de Amdahl

Escenario: 40 % secuencial, 60 % paralelizable; aceleración máxima.

Respuesta correcta: A

Opción Correcta Análisis
A Correcta Con infinitos procesadores: 1/(1-0,6) = 1/0,4 = 2,5.
B Incorrecta 1,67 es la aceleración con 3 procesadores, no el techo.
C Incorrecta 3 no es alcanzable.
D Incorrecta 6 no es alcanzable.
E Incorrecta La fracción secuencial del 40 % impone un techo.

Pregunta 7 - Medición empírica de programas paralelos

Escenario: un estudiante compara secuencial y paralelo con una sola ejecución de cada una.

Respuestas correctas: B, C, E

Opción Correcta Análisis
A Incorrecta La primera ejecución, antes del calentamiento, es la menos representativa.
B Correcta Una sola corrida de cada versión no es fiable: el tiempo varía.
C Correcta Repetir muchas veces y comparar un estadístico robusto, como la mediana, da fiabilidad.
D Incorrecta El recolector de basura sí puede activarse durante la medición e influir.
E Correcta Las primeras ejecuciones, antes del calentamiento de la JVM, se descartan.

Pregunta 8 - Aceleración y sobrecarga del paralelismo

Escenario: versión secuencial 12 s; paralela en 4 núcleos, 4 s.

Respuestas correctas: C, E

Opción Correcta Análisis
A Incorrecta La aceleración rara vez iguala el número de núcleos; suele ser menor.
B Incorrecta Duplicar los núcleos no garantiza reducir el tiempo a la mitad.
C Correcta La aceleración es el cociente de tiempos: 12 / 4 = 3.
D Incorrecta Una aceleración por debajo del número de núcleos es normal, no un error.
E Correcta La sobrecarga de coordinación y la parte secuencial explican que no se llegue a 4.

Pregunta 9 - Semántica de parallel

Escenario: parallel(parallel(f1(), f2()), parallel(f3(), f4())) con cuatro funciones de ~1 s.

Respuestas correctas: A, C, E

Opción Correcta Análisis
A Correcta Las cuatro funciones se solapan; el tiempo total ronda 1 segundo.
B Incorrecta El código compila: cada argumento de parallel es, a su vez, un parallel.
C Correcta Anidar parallel permite lanzar más de dos cálculos en paralelo.
D Incorrecta No son 4 segundos: las funciones se ejecutan concurrentemente.
E Correcta El resultado es ((a, b), (c, d)): un par de pares con los cuatro valores.

Pregunta 10 - Reducción paralela y asociatividad

Escenario: reducción paralela de un arreglo combinando con max.

Respuestas correctas: B, C, D

Opción Correcta Análisis
A Incorrecta max es asociativa: el resultado no depende de cuál mitad termine primero.
B Correcta max es asociativa: el resultado paralelo coincide con el secuencial.
C Correcta La resta no es asociativa; al reagrupar, el resultado podría diferir.
D Correcta El umbral solo afecta el rendimiento, no el resultado.
E Incorrecta max no requiere que el arreglo esté ordenado.

Pregunta 11 - Tareas: task y ubicación de join

Escenario: dos tareas, cada una unida con join() justo al crearse.

Respuesta correcta: B

Opción Correcta Análisis
A Incorrecta task sí ejecuta su cálculo en paralelo.
B Correcta Cada tarea se une con join() antes de crear la siguiente: la segunda no empieza hasta que la primera termina.
C Incorrecta calcular(a) y calcular(b) son independientes.
D Incorrecta Se pueden tener varias tareas task activas a la vez.
E Incorrecta join() espera la tarea; no la ejecuta más lentamente.

Pregunta 12 - Umbral y granularidad

Escenario: una versión «paralela» tarda lo mismo que la secuencial; el umbral se fijó muy alto.

Respuestas correctas: B, C, D, E

Opción Correcta Análisis
A Incorrecta Un umbral muy alto no acelera: deja el cálculo en secuencial.
B Correcta Con un umbral tan alto casi nunca se entra a la rama paralela.
C Correcta Bajar el umbral permite repartir el trabajo entre los núcleos.
D Correcta Un umbral demasiado bajo genera muchas tareas y la sobrecarga puede dominar.
E Correcta El umbral ajusta el rendimiento; no cambia el resultado del cálculo.

Pregunta 13 - foldLeft frente a fold

Escenario: un estudiante cambia foldLeft por par.foldLeft y no observa mejora.

Respuestas correctas: A, D

Opción Correcta Análisis
A Correcta foldLeft encadena el acumulador de izquierda a derecha: sigue siendo secuencial aunque la colección sea paralela.
B Incorrecta par.foldLeft compila sin problema.
C Incorrecta No se acelera por la dependencia del acumulador, no por el tamaño de la lista.
D Correcta fold o aggregate con una operación asociativa sí permiten el cálculo en paralelo.
E Incorrecta La solución no es un ciclo, sino una operación asociativa.

Pregunta 14 - Agregación paralela

Escenario: List(3, 7, 1, 9, 4).par.fold(0)(_ + _).

Respuestas correctas: A, B, D, E

Opción Correcta Análisis
A Correcta 0 es el elemento neutro de la suma: combinar con 0 no altera el resultado.
B Correcta La suma es asociativa: fold puede reagrupar los sumandos.
C Incorrecta 1 no es el neutro; además, en un fold paralelo el valor inicial puede combinarse varias veces.
D Correcta 3 + 7 + 1 + 9 + 4 = 24.
E Correcta fold exige que el tipo del resultado coincida con el de los elementos.

Pregunta 15 - Seguridad en el paralelismo de datos

Escenario: se inicializa un arreglo con .par; cada tarea escribe en su propia posición.

Respuestas correctas: A, B, D, E

Opción Correcta Análisis
A Correcta Cada tarea escribe en una posición distinta: no hay condición de carrera.
B Correcta El cálculo es seguro porque las escrituras de las tareas no se solapan.
C Incorrecta No hace falta synchronized: no hay un dato compartido en disputa.
D Correcta El resultado no depende del orden en que terminen las tareas.
E Correcta El paralelismo de datos exige que el trabajo sobre cada elemento sea independiente.

Tabla resumen de respuestas

Pregunta Tema Correctas
1 Intercalación de hilos y no determinismo A, C, D
2 Garantías de join A, C
3 Condición de carrera y atomicidad B, D, E
4 Interbloqueo B, C
5 Trabajo y profundidad B, D, E
6 Ley de Amdahl A
7 Medición empírica de programas paralelos B, C, E
8 Aceleración y sobrecarga del paralelismo C, E
9 Semántica de parallel A, C, E
10 Reducción paralela y asociatividad B, C, D
11 Tareas: task y ubicación de join B
12 Umbral y granularidad B, C, D, E
13 foldLeft frente a fold A, D
14 Agregación paralela A, B, D, E
15 Seguridad en el paralelismo de datos A, B, D, E