2.11. Computación Paralela y Distribuida (PDC)
La programación paralela y distribuida organiza, coordina y controla múltiples cálculos que ocurren al mismo tiempo en diferentes lugares. La ubicuidad del paralelismo y la distribución son consecuencias inevitables del creciente número de puertas en los procesadores, procesadores en las computadoras y computadoras en todas partes que pueden usarse para mejorar el rendimiento en comparación con los programas secuenciales, al mismo tiempo que se hace frente a la interconectividad intrínseca del mundo y la posibilidad de que algunos componentes o conexiones fallen o se comporten de manera maliciosa. La programación paralela y distribuida elimina las restricciones de la programación secuencial que requieren que los pasos computacionales ocurran en un orden serial en un solo lugar, revelando distinciones, técnicas y análisis adicionales que se aplican en cada capa de los sistemas informáticos.
En la mayoría de los usos convencionales, la programación "paralela"se centra en establecer y coordinar múltiples actividades que pueden ocurrir al mismo tiempo, la programación "distribuida"se centra en establecer y coordinar actividades que pueden ocurrir en diferentes lugares, y la programación çoncurrente"se centra en las interacciones de las actividades en curso entre sí y con el entorno. Sin embargo, los tres términos pueden aplicarse en la mayoría de los contextos. El paralelismo generalmente implica alguna forma de distribución porque múltiples actividades que ocurren sin restricciones de orden secuencial suceden en múltiples lugares físicos (a menos que dependan de cambios de contexto o efectos cuánticos). Por el contrario, las acciones en diferentes lugares no necesitan tener un orden secuencial específico entre sí en ausencia de restricciones de comunicación.
Las técnicas de programación paralela, distribuida y concurrente forman el núcleo de la Computación de Alto Rendimiento (HPC), los sistemas distribuidos y, cada vez más, casi todas las aplicaciones informáticas. El área de conocimiento PDC ha evolucionado desde un conjunto diverso de temas avanzados hasta un cuerpo central de conocimiento y práctica, que impregna casi todos los demás aspectos de la informática. El crecimiento del campo ha ocurrido de manera irregular en los diferentes subcampos de la informática, a veces con diferentes objetivos, terminología y prácticas, ocultando la superposición considerable de ideas y habilidades básicas que son el foco principal de esta área de conocimiento. Casi todos los problemas con una solución secuencial también admiten soluciones paralelas y/o distribuidas; surgen problemas y soluciones adicionales solo en el contexto de la concurrencia. Casi todos los dominios de aplicación de la computación paralela y distribuida son un área de estudio y/o ingeniería bien desarrollada, demasiado grande para enumerarla.
| área de Conocimiento (Knowledge Area-KA) (KA) | Core Tier1 | Core Tier2 | Electivo |
| 2.11.1 Programas: Paralelismo Declarativo |
|
| No |
| 2.11.2 Programas: Inicio de Actividades |
|
| No |
| 2.11.3 Programas: Propiedades de Ejecución |
|
| No |
| 2.11.4 Programas: Distribución |
|
| No |
| 2.11.5 Programas: Mapeos de Implementación |
|
| No |
| 2.11.6 Programación GPU |
|
| No |
| 2.11.7 Comunicación |
|
| No |
| 2.11.8 Comunicación: Propiedades y Extensiones |
|
| No |
| 2.11.9 Memoria y Consistencia |
|
| No |
| 2.11.10 Coordinación |
|
| No |
| 2.11.11 Coordinación: Sincronización y Atomicidad |
|
| No |
| 2.11.12 Coordinación: Propiedades Avanzadas |
|
| No |
| 2.11.13 Evaluación |
|
| No |
| 2.11.14 Evaluación: Métodos Formales |
|
| No |
| 2.11.15 Evaluación: Pruebas y Medición |
|
| No |
| 2.11.16 Algoritmos |
|
| No |
| 2.11.17 Algoritmos: Dominios de Aplicación |
|
| No |
| 2.11.18 Algoritmos: Dominios Algorítmicos |
|
| No |
2.11.1. PDC/Programas: Paralelismo Declarativo
Temas:
Core
-
Paralelismo
- 1.
- Paralelismo declarativo: Determinar qué acciones pueden, o no deben, realizarse en paralelo, a nivel de instrucciones, funciones, clausuras, acciones compuestas, sesiones, tareas y servicios es la idea principal que subyace a los algoritmos PDC; no hacerlo es la principal fuente de errores. Ver también: Computación Paralela y Distribuida (PDC) -Algorithms
- 2.
- Definir orden: por ejemplo, usando relaciones de "sucede antesº grafos acíclicos dirigidos serie/paralelo que representan programas.
- 3.
- Independencia: determinar cuándo el orden no importa, en términos de conmutatividad, dependencias, precondiciones.
- 4.
- Garantizar el orden entre acciones que de otro modo serían paralelas cuando sea necesario, incluyendo bloqueos, publicación segura; e imponer comunicación - enviar un mensaje sucede antes de recibirlo; y relajarlo cuando no sea necesario.
Aprendizaje esperado (Learning Outcomes):
Core:
- 1.
- Mostrar gráficamente (como un Grafo Acíclico Dirigido - Directed Acyclic Graph (DAG)) cómo paralelizar una expresión numérica compuesta; por ejemplo, a = (b + c) ∗ (d + e) [Diseñar]
- 2.
- Explicar por qué los conceptos de consistencia y tolerancia a fallos no surgen en programas puramente secuenciales [Explicar]
2.11.2. PDC/Programas: Inicio de Actividades
Temas:
Core
-
Iniciar actividades
- 1.
- Las opciones que permiten que las acciones se realicen (eventualmente) en lugares van desde el cableado directo hasta scripts de configuración; también establecer comunicación y gestión de recursos; estos se expresan de manera diferente en los lenguajes y contextos, generalmente confiando en el aprovisionamiento y gestión automatizados por las plataformas. Ver también: Fundamentos de Sistemas (SF) -Resource
- 2.
- Procedimental: Permitir que múltiples acciones comiencen en un punto de programa dado; por ejemplo, iniciar nuevos hilos, posiblemente delimitando su alcance u organizándolos en grupos jerárquicos.
- 3.
- Reactiva: Habilitar al ocurrir un evento instalando un manejador de eventos, con menos control de cuándo comienzan o terminan las acciones, y puede aplicarse incluso en monoprocesadores.
- 4.
- Dependiente: Habilitar al completarse otras; por ejemplo, secuenciando conjuntos de
acciones paralelas. Ver también: Computación Paralela y Distribuida (PDC) -Coordination.
- 5.
- Granularidad: El costo de ejecución de los cuerpos de las acciones debe superar la sobrecarga de organizarlos.
Aprendizaje esperado (Learning Outcomes):
Core:
- 1.
- Escribir un servicio que cree un hilo (u otra forma de activación procedimental) para devolver una página web solicitada a cada nuevo cliente [Escribir]
2.11.3. PDC/Programas: Propiedades de Ejecución
Temas:
Core
-
Propiedades de Ejecución
- 1.
- Ejecución no determinista de acciones sin orden.
- 2.
- Consistencia: Garantizar el acuerdo entre partes sobre valores y predicados cuando sea necesario para evitar carreras, mantener seguridad y atomicidad, o llegar a consenso.
- 3.
- Tolerancia a fallos: Manejar fallos en las partes o la comunicación, incluyendo (Bizantino) mal comportamiento debido a partes y protocolos no confiables, cuando sea necesario para mantener el progreso o la disponibilidad. Ver también: Fundamentos de Sistemas (SF) -Reliability.
- 4.
- Los compromisos son un foco de evaluación. Ver también: Computación Paralela y Distribuida (PDC) -Evaluation.
Aprendizaje esperado (Learning Outcomes):
Core:
- 1.
- Escribir una función que cuente eventos, como recepciones de paquetes de red, de manera eficiente [Escribir]
2.11.4. PDC/Programas: Distribución
Temas:
Core
-
Distribución
- 1.
- Definir lugares, como dispositivos que ejecutan acciones, incluyendo componentes de hardware, hosts remotos; también pueden incluir dispositivos, hosts y usuarios externos no controlados. Ver también: Arquitectura y Organización (AR) -InterfacingCommunication
- 2.
- Un dispositivo puede dividir el tiempo o emular múltiples acciones paralelas mediante menos
procesadores mediante planificación y virtualización. Ver también: Sistemas Operativos
(OS) -Scheduling
- 3.
- Nombrar o identificar lugares (por ejemplo, IDs de dispositivo) y acciones como partes (por ejemplo, IDs de hilo).
- 4.
- Las actividades a través de lugares pueden comunicarse a través de medios. Ver también: Computación Paralela y Distribuida (PDC) -Communication
Aprendizaje esperado (Learning Outcomes):
Core:
2.11.5. PDC/Programas: Mapeos de Implementación
Temas:
Core
-
Una o más de las siguientes asignaciones y mecanismos a través de sistemas en capas:
- 1.
- Paralelismo a nivel de instrucción y datos en la CPU. Ver también: Arquitectura y Organización (AR) -FunctionalOrganization.
- 2.
- SIMD y paralelismo de datos heterogéneo. Ver también: Arquitectura y Organización (AR) -HeterogeneousArchitectures.
- 3.
- Concurrencia planificada en multinúcleo, tareas, actores. Ver también: Sistemas Operativos (OS) -Scheduling.
- 4.
- Clústeres, nubes; aprovisionamiento elástico. Ver también: Desarrollo de Plataformas Especializadas (SPD) -CommonAspectsSharedConcerns.
- 5.
- Sistemas distribuidos en red. Ver también: Redes y Comunicaciones (NC) -Applications.
- 6.
- Tecnologías emergentes como la computación cuántica y la computación molecular.
Aprendizaje esperado (Learning Outcomes):
Core:
- 1.
- Explicar las compensaciones entre diferentes estrategias de mapeo en términos de rendimiento, costo y complejidad de implementación [Explicar]
2.11.6. PDC/Programación GPU
Temas:
Non Core
-
Computación de Propósito General en GPU (GPGPU)
- 1.
- Arquitectura de GPU: multiprocesadores de flujo (SMs), núcleos CUDA y modelo de
ejecución por warp.
- 2.
- Modelo de ejecución SIMT (Single Instruction, Multiple Threads) y sus diferencias respecto al SIMD de CPU.
- 3.
- Interacción host-dispositivo: transferencia de datos entre memoria de CPU (host) y GPU (dispositivo) vía PCIe.
- 4.
- Casos de uso: computación científica, aprendizaje automático, procesamiento de imágenes y simulación a gran escala.
-
Modelo de Programación CUDA
- 1.
- Jerarquía de ejecución CUDA: grids, bloques de hilos e hilos individuales; mapeo al hardware GPU.
- 2.
- Definición y lanzamiento de kernels; parámetros de configuración (dimensiones de grid y bloque).
- 3.
- Indexación de hilos: threadIdx, blockIdx, blockDim, gridDim; cálculo de índices globales en 1D, 2D y 3D.
- 4.
- Divergencia de warp: implicaciones de las bifurcaciones dentro de un warp en el rendimiento.
- 5.
- Primitiva de sincronización intra-bloque: __syncthreads.
-
Jerarquía de Memoria CUDA
- 1.
- Memoria global: grande, alta latencia, accesible por todos los hilos; patrones de acceso coalescente para el rendimiento.
- 2.
- Memoria compartida: memoria en chip de baja latencia compartida dentro de un bloque de hilos; conflictos de banco.
- 3.
- Registros y memoria local: almacenamiento privado por hilo.
- 4.
- Memoria constante y de textura: cachés de solo lectura optimizadas para patrones de acceso específicos.
- 5.
- Memoria unificada: modelo de programación simplificado con migración automática de datos entre host y dispositivo.
Aprendizaje esperado (Learning Outcomes):
NonCore:
- 1.
- Escribir un kernel CUDA que realice una operación data-paralela (p. ej., suma de vectores, multiplicación de matrices) y configurar correctamente las dimensiones de grid y bloque [Escribir]
- 2.
- Analizar el impacto de los patrones de acceso a memoria global (acceso coalescente vs. acceso entrelazado) y el uso de memoria compartida en el rendimiento de un kernel GPU [Analizar]
- 3.
- Diseñar un algoritmo paralelo usando el modelo de programación CUDA, incluyendo la jerarquía de hilos, estrategia de asignación de memoria y transferencias de datos entre host y dispositivo [Diseñar]
2.11.7. PDC/Comunicación
Temas:
Core
-
Medios
- 1.
- Variedades: canales (paso de mensajes o E/S), memoria compartida, heterogéneos, almacenes de datos.
- 2.
- Dependencia de la disponibilidad y naturaleza del hardware subyacente, conectividad y protocolos; soporte del lenguaje, emulación. Ver también: Arquitectura y Organización (AR) -InterfacingCommunication.
-
Canales
- 1.
- Medios de comunicación de parte a parte explícitos (generalmente nombrados).
- 2.
- APIs: Sockets, constructos arquitectónicos, basados en lenguaje y de kits de herramientas, como Message Passing Interface (MPI), y constructos en capas como Llamada a Procedimiento Remoto (RPC). Ver también: Redes y Comunicaciones (NC) -Fundamentals.
- 3.
- APIs de canales de E/S.
-
Memoria
- 1.
- Arquitecturas de memoria compartida en las que las partes se comunican directamente solo con la memoria en direcciones dadas, con extensiones a memoria heterogénea que admite múltiples almacenes de memoria con transferencia de datos explícita entre ellos; por ejemplo, memoria local y compartida de GPU, Acceso Directo a Memoria (DMA).
- 2.
- Jerarquías de memoria: Múltiples capas de dominios, alcances y cachés compartidos; localidad: latencia, falso uso compartido.
- 3.
- Propiedades de consistencia: Límites de atomicidad a nivel de bits, coherencia, orden local.
-
Almacenes de Datos
- 1.
- Estructuras de datos mantenidas cooperativamente que implementan mapas y TADs relacionados.
- 2.
- Variedades: Propiedad exclusiva, compartida, fragmentada, replicada, inmutable, versionada.
Aprendizaje esperado (Learning Outcomes):
Core:
- 1.
- Explicar las similitudes y diferencias entre: (1) La parte A envía un mensaje en el canal X con contenido 1 recibido por la parte B (2) A establece la variable compartida X a 1, leída por B (3) A establece "X=1en un mapa compartido distribuido al que accede B [Explicar]
- 2.
- Escribir un programa que distribuya diferentes segmentos de un conjunto de datos a múltiples
trabajadores y recoja los resultados (por ejemplo, sumar segmentos de un arreglo) [Escribir]
- 3.
- Escribir un programa paralelo que solicite datos de múltiples sitios y los resuma usando alguna forma de reducción [Escribir]
- 4.
- Comparar el rendimiento de versiones con y sin búfer de un programa productor-consumidor [Comparar]
2.11.8. PDC/Comunicación: Propiedades y Extensiones
Temas:
Core
-
Una o más de las siguientes propiedades y extensiones:
- 1.
- Topologías: Unicast, Multicast, Buzones, Conmutadores; Enrutamiento a través de redes de interconexión de hardware y software.
- 2.
- Propiedades de concurrencia de medios: Orden, consistencia, idempotencia, superposición de comunicación con computación.
- 3.
- Rendimiento del medio: Latencia, ancho de banda (rendimiento), contención (congestión), capacidad de respuesta (vivacidad), confiabilidad (tasas de error y pérdida), progreso basado en protocolo (acks, tiempos de espera, mediación).
- 4.
- Propiedades de seguridad del medio: integridad, privacidad, autenticación, autorización. Ver también: Seguridad (SEC) -Coding.
- 5.
- Formatos de datos: Serialización, validación, cifrado, compresión.
- 6.
- Políticas de canal: Puntos finales, sesiones, almacenamiento en búfer, respuesta a saturación (esperar vs. descartar), control de velocidad.
- 7.
- Multiplexación y demultiplexación de muchos dispositivos o partes de E/S relativamente lentos; técnicas basadas en finalización y basadas en planificador; APIs async-await, select y polling.
- 8.
- Formalización y análisis de comunicación por canales; por ejemplo, CSP.
- 9.
- Aplicaciones de la teoría de colas para modelar y predecir el rendimiento.
Aprendizaje esperado (Learning Outcomes):
Core:
- 1.
- Determinar si un esquema de comunicación dado proporciona propiedades de seguridad suficientes para un uso dado [Determinar]
- 2.
- Dar un ejemplo de un escenario en el que los envíos de mensajes bloqueantes pueden causar un punto muerto (deadlock) [Crear]
- 3.
- Describir al menos una técnica de diseño para evitar fallos de vivacidad en programas que usan múltiples bloqueos [Describir]
2.11.9. PDC/Memoria y Consistencia
Temas:
Core
-
Modelos de memoria, consistencia de datos y tolerancia a fallos:
- 1.
- Modelos de memoria: consistencia secuencial y de liberación/adquisición.
- 2.
- Gestión de memoria; incluyendo la reclamación de datos compartidos; conteo de referencias y alternativas.
- 3.
- Colocación y transferencia masiva de datos; reducción del tráfico de mensajes y mejora de la localidad; superposición de transferencia de datos y computación; impacto del diseño de datos como array de estructuras vs. estructura de arrays.
- 4.
- Emular memoria compartida: memoria compartida distribuida, Acceso Directo a Memoria Remota (RDMA).
- 5.
- Consistencia de almacenes de datos: Atomicidad, linealizabilidad, transaccionalidad, coherencia, orden causal, resolución de conflictos, consistencia eventual, cadenas de bloques.
- 6.
- Fallos, particionamiento y fallos parciales; votación; protocolos como Paxos y Raft.
- 7.
- Compromisos de diseño entre consistencia, disponibilidad, tolerancia a partición (fallos); imposibilidad de cumplir con todos a la vez.
- 8.
- Seguridad y confianza: Fallos bizantinos, prueba de trabajo y alternativas.
Aprendizaje esperado (Learning Outcomes):
Core:
- 1.
- Dar un ejemplo de un orden de accesos entre actividades concurrentes (por ejemplo, un programa con una carrera de datos) que no sea secuencialmente consistente [Crear]
- 2.
- Escribir un programa que ilustre el reordenamiento de acceso a memoria o de mensajes [Escribir]
- 3.
- Describir los méritos relativos del control de concurrencia optimista versus conservador bajo diferentes tasas de contención entre actualizaciones [Describir]
- 4.
- Dar un ejemplo de un escenario en el que un intento de actualización optimista podría nunca completarse [Crear]
- 5.
- Modificar un sistema concurrente para usar un almacén de datos más escalable, confiable o disponible [Crear]
- 6.
- Usando una plataforma existente que admita almacenes de datos replicados, escribir un programa que mantenga un mapeo clave-valor incluso cuando uno o más hosts fallen [Escribir]
2.11.10. PDC/Coordinación
Temas:
Core
-
Dependencias
- 1.
- La iniciación o progreso de una actividad puede depender de otras actividades, para evitar condiciones de carrera, garantizar la terminación o cumplir otros requisitos.
- 2.
- Garantizar el progreso evitando ciclos de dependencia, usando condiciones monótonas, eliminando dependencias no esenciales.
-
Constructos de control y patrones de diseño:
- 1.
- Basados en finalización: Barreras, reuniones (joins), incluido el control de terminación.
- 2.
- Habilitados por datos: Colas, diseños productor-consumidor.
- 3.
- Basados en condición: Polling, reintentos, retrocesos, ayuda, suspensión, señalización, tiempos de espera.
- 4.
- Reactivos: Habilitar y activar continuaciones.
Aprendizaje esperado (Learning Outcomes):
Core:
- 1.
- Mostrar cómo garantizar que un programa termine correctamente cuando todas las tareas concurrentes de un conjunto hayan finalizado [Diseñar]
- 2.
- Escribir una función que cuente eventos, como entradas de sensores o recepciones de paquetes de red, de manera eficiente [Escribir]
- 3.
- Escribir un programa de filtro/mapeo/reducción en múltiples estilos [Escribir]
- 4.
- Escribir un programa en el que la terminación de un conjunto de acciones paralelas sea seguida por otra [Escribir]
- 5.
- Escribir un servicio que cree un hilo (u otra forma de activación procedimental) para devolver una página web solicitada a cada nuevo cliente [Escribir]
2.11.11. PDC/Coordinación: Sincronización y Atomicidad
Temas:
Core
-
Atomicidad
- 1.
- Instrucciones atómicas, ordenamientos de acceso local impuestos.
- 2.
- Bloqueos y exclusión mutua; granularidad de bloqueo.
- 3.
- Uso de bloqueos en un lenguaje específico; mantener la vivacidad sin introducir carreras.
- 4.
- Evitar punto muerto (deadlock): Ordenamiento, mayor granularidad, reintentos aleatorios;
retrocesos, encapsulación mediante administradores de bloqueos.
- 5.
- Errores comunes: No bloquear o desbloquear cuando es necesario, mantener bloqueos mientras se invocan operaciones desconocidas.
- 6.
- Evitar bloqueos: replicación, solo lectura, propiedad, y construcciones no bloqueantes.
Aprendizaje esperado (Learning Outcomes):
Core:
2.11.12. PDC/Coordinación: Propiedades Avanzadas
Temas:
Core
-
Una o más de las siguientes propiedades y extensiones:
- 1.
- Propiedades de progreso incluyendo libre de bloqueo (lock-free), libre de espera (wait-free), equidad (fairness), planificación por prioridad, interacciones con consistencia, confiabilidad.
- 2.
- Rendimiento con respecto a contención, granularidad, convoy, escalabilidad.
- 3.
- Estructuras de datos y algoritmos no bloqueantes.
- 4.
- Propiedad y control de recursos.
- 5.
- Variantes y alternativas de bloqueos: bloqueos de secuencia, bloqueos de lectura-escritura; Actualizar-Copiando-Lectura (RCU), reentrada; tickets; control del ciclo activo (spinning) versus bloqueo.
- 6.
- Control basado en transacciones: Optimista y conservador.
- 7.
- Bloqueo distribuido: confiabilidad.
- 8.
- Alternativas a barreras: Relojes; contadores, relojes virtuales; flujo de datos y continuaciones; futuros y RPC; basadas en consenso, recolección de resultados con reductores y colectores.
- 9.
- Especulación, selección, cancelación; consecuencias en observabilidad y seguridad.
- 10.
- Control de recursos usando semáforos y variables de condición.
- 11.
- Flujo de control: Planificación de computaciones, bucles serie-paralelo con líderes (posiblemente elegidos), tuberías y flujos, paralelismo anidado.
- 12.
- Excepciones y fallos. Manejadores, detección, tiempos de espera, tolerancia a fallos, votación.
Aprendizaje esperado (Learning Outcomes):
Core:
- 1.
- Escribir un programa que busque especulativamente una solución mediante múltiples actividades,
terminando las demás cuando se encuentre una [Escribir]
- 2.
- Escribir un programa en el que una excepción numérica (como división por cero) en una actividad cause la terminación de las demás [Escribir]
- 3.
- Escribir un programa para que múltiples partes acuerden la hora actual del día; discutir sus limitaciones en comparación con protocolos como el protocolo de transferencia de red (NTP) [Escribir]
2.11.13. PDC/Evaluación
Temas:
Core
- Requisitos de seguridad (safety) y vivacidad (liveness) en términos de constructos de lógica temporal para expresar "siempre 2 e ventualmente"Ver también: Fundamentos de los Lenguajes de Programación (FPL) -ParallelDistributedComputing.
- Identificar, probar y reparar violaciones, incluyendo formas comunes de errores como no garantizar el orden necesario (errores de carrera), atomicidad (incluyendo errores de "verificar luego actuar") y terminación (bloqueo activo).
- Métricas de requisitos de rendimiento para rendimiento (throughput), capacidad de respuesta, latencia, disponibilidad, consumo de energía, escalabilidad, uso de recursos, costos de comunicación, espera y control de velocidad, equidad; acuerdos de nivel de servicio. Ver también: Fundamentos de Sistemas (SF) -Performance.
- Impacto en el rendimiento de las opciones de diseño e implementación, incluyendo granularidad, sobrecarga, costos de consenso y consumo de energía. Ver también: Sociedad, ética y la Profesión (SEP) -Sustainability.
- Estimar limitaciones de escalabilidad, por ejemplo usando la Ley de Amdahl o la Ley de Escalabilidad Universal. Ver también: Fundamentos de Sistemas (SF) -Evaluation.
Aprendizaje esperado (Learning Outcomes):
Core:
- 1.
- Revisar una especificación para habilitar el paralelismo y la distribución sin violar otras propiedades o características esenciales [Rediseñar]
- 2.
- Explicar cómo las nociones concurrentes de seguridad (safety) y vivacidad (liveness) extienden sus contrapartes secuenciales [Explicar]
- 3.
- Especificar un conjunto de invariantes que deben mantenerse en cada paso de cómputo de paralelismo masivo [Analizar]
- 4.
- Escribir un programa de prueba que pueda revelar un error de carrera de datos; por ejemplo, perder una actualización cuando dos actividades intentan incrementar una variable [Escribir]
- 5.
- En un contexto dado, explicar hasta qué punto se esperaría que introducir paralelismo en
un programa por lo demás secuencial mejoraría el rendimiento (throughput) y/o reduciría la
latencia, y cómo podría afectar la eficiencia energética [Explicar]
- 6.
- Mostrar cómo cambian la escalabilidad y la eficiencia para problemas de muestra con y sin el supuesto de que el tamaño del problema cambia con el número de procesadores; además, explicar si y cómo cambiaría la escalabilidad bajo relajaciones de dependencias secuenciales [Diseñar]
2.11.14. PDC/Evaluación: Métodos Formales
Temas:
Core
-
Métodos formales de verificación y análisis:
- 1.
- Extensiones a requisitos formales secuenciales como la linealizabilidad.
- 2.
- Especificaciones de protocolo, sesión y transacciones.
- 3.
- Uso de herramientas como Lenguaje Unificado de Modelado (UML), Lógica Temporal de Acciones (TLA), lógicas de programa.
- 4.
- Análisis de seguridad: seguridad y vivacidad en presencia de comportamientos hostiles o con errores de otras partes; propiedades requeridas de mecanismos de comunicación (por ejemplo, ausencia de fugas entre capas), filtrado de entrada, limitación de velocidad. Ver también: Seguridad (SEC) -Foundations.
- 5.
- Análisis estático aplicado a corrección, rendimiento (throughput), latencia, recursos, energía. Ver también: Sociedad, ética y la Profesión (SEP) -Sustainability.
- 6.
- Análisis del modelo de Grafo Acíclico Dirigido (DAG) de eficiencia algorítmica (trabajo, span, caminos críticos).
Aprendizaje esperado (Learning Outcomes):
Core:
- 1.
- Especificar y medir el comportamiento cuando un servicio es solicitado por un número inesperadamente grande de clientes [Analizar]
- 2.
- Identificar y reparar un problema de rendimiento debido a cuellos de botella secuenciales [Analizar]
- 3.
- Comparar empíricamente el rendimiento (throughput) de dos implementaciones de un diseño común (quizás usando un marco de pruebas existente) [Comparar]
2.11.15. PDC/Evaluación: Pruebas y Medición
Temas:
Core
-
Herramientas de prueba y técnicas de medición:
- 1.
- Pruebas y depuración; herramientas como detectores de carreras, fuzzers, verificadores de
dependencia de bloqueos, pruebas de unidad/esfuerzo/tortura, visualizaciones, integración
continua (CI), despliegue continuo (CD), y generadores de pruebas.
- 2.
- Medir y comparar rendimiento (throughput), sobrecarga, espera, contención, comunicación, movimiento de datos, localidad, uso de recursos, comportamiento en presencia de números excesivos de eventos, clientes o hilos. Ver también: Fundamentos de Sistemas (SF) -Evaluation.
- 3.
- Análisis específicos del dominio de aplicación y técnicas de evaluación.
Aprendizaje esperado (Learning Outcomes):
Core:
- 1.
- Identificar y reparar un problema de rendimiento debido a latencia de comunicación o datos [Analizar]
- 2.
- Identificar y reparar un problema de rendimiento debido a sobrecarga en la gestión de recursos [Analizar]
- 3.
- Identificar y reparar un problema de confiabilidad o disponibilidad [Analizar]
2.11.16. PDC/Algoritmos
Temas:
Core
-
Expresar e implementar algoritmos en lenguajes y marcos de trabajo dados, para iniciar actividades (por ejemplo hilos), usar constructos de memoria compartida, y APIs de canales, sockets y/o llamada a procedimiento remoto (RPC). Ver también: Fundamentos de los Lenguajes de Programación (FPL) -ParallelDistributedComputing.
- 1.
- Ejemplos de datos paralelos incluyendo mapeo/reducción.
- 2.
- Uso de APIs de canal, socket y/o RPC en un lenguaje dado, con control del programa para enviar (generalmente procedimental) vs recibir (generalmente reactivo o basado en RPC).
- 3.
- Uso de bloqueos, barreras y/o sincronizadores para mantener la vivacidad sin introducir carreras.
Aprendizaje esperado (Learning Outcomes):
Core:
- 1.
- Implementar un componente paralelo/distribuido basado en un algoritmo conocido [Implementar]
- 2.
- Escribir un programa de datos paralelos que, por ejemplo, calcule el promedio de un arreglo de números [Escribir]
- 3.
- Escribir un programa productor-consumidor en el que un componente genere números y otro calcule su promedio. Medir las aceleraciones cuando los números son escalares pequeños versus valores de multiprecisión grandes [Escribir]
2.11.17. PDC/Algoritmos: Dominios de Aplicación
Temas:
Core
-
Panorama de dominios de aplicación comunes en multinúcleo, reactivo, datos paralelos, clúster, nube, sistemas distribuidos abiertos y marcos de trabajo (con referencia a la siguiente tabla).
- 1.
- Multinúcleo: Agentes de ejecución típicos: Hilos. Mecanismos de comunicación típicos: Memoria compartida, Atómicos, bloqueos. Dominios algorítmicos típicos: Gestión de recursos, procesamiento de datos. Objetivos de ingeniería típicos: Rendimiento (throughput), latencia, energía.
- 2.
- Reactivo: Agentes de ejecución típicos: Manejadores, hilos. Mecanismos de comunicación típicos: Canales de E/S. Dominios algorítmicos típicos: Servicios, tiempo real. Objetivos de ingeniería típicos: Latencia.
- 3.
- Datos paralelos: Agentes de ejecución típicos: GPU, SIMD, aceleradores, híbridos. Mecanismos de comunicación típicos: Memoria heterogénea. Dominios algorítmicos típicos: álgebra lineal, gráficos, análisis de datos. Objetivos de ingeniería típicos: Rendimiento (throughput), energía.
- 4.
- Clúster: Agentes de ejecución típicos: Hosts gestionados. Mecanismos de comunicación típicos: Sockets, canales. Dominios algorítmicos típicos: Simulación, análisis de datos. Objetivos de ingeniería típicos: Rendimiento (throughput).
- 5.
- Nube: Agentes de ejecución típicos: Hosts aprovisionados. Mecanismos de comunicación típicos: APIs de servicio. Dominios algorítmicos típicos: Aplicaciones web. Objetivos de ingeniería típicos: Escalabilidad.
- 6.
- Distribuido abierto: Agentes de ejecución típicos: Hosts autónomos. Mecanismos de comunicación típicos: Sockets, Almacenes de datos. Dominios algorítmicos típicos: Almacenes de datos y servicios tolerantes a fallos. Objetivos de ingeniería típicos: Confiabilidad.
Aprendizaje esperado (Learning Outcomes):
Core:
- 1.
- Extender un programa secuencial dirigido por eventos estableciendo una nueva actividad en un manejador de eventos (por ejemplo, un nuevo hilo en un manejador de acciones de GUI) [Diseñar]
- 2.
- Mejorar el rendimiento de un componente secuencial introduciendo paralelismo y/o distribución [Crear]
- 3.
- Elegir entre diferentes diseños paralelos/distribuidos para componentes de un sistema dado [Evaluar (valorar)]
2.11.18. PDC/Algoritmos: Dominios Algorítmicos
Temas:
Core
-
Uno o más de los siguientes dominios algorítmicos. Ver también: Fundamentos Algorítmicos (AL)
-AlgorithmicStrategies:
- 1.
- álgebra lineal: Operaciones con vectores y matrices, precisión/estabilidad numérica, aplicaciones en análisis de datos y aprendizaje automático.
- 2.
- Procesamiento de datos: ordenación, búsqueda y recuperación, estructuras de datos concurrentes.
- 3.
- Grafos, búsqueda y combinatoria: Marcado, paralelización de aristas, acotamiento, especulación, análisis basado en redes.
- 4.
- Modelado y simulación: ecuaciones diferenciales; aleatorización, problemas de N-cuerpos, algoritmos genéticos.
- 5.
- Lógica computacional: satisfactibilidad (SAT), programación lógica concurrente.
- 6.
- Gráficos y geometría computacional: Transformaciones, renderizado, trazado de rayos.
- 7.
- Gestión de recursos: Asignar, colocar, reciclar y planificar procesadores, memoria, canales y hosts; recursos exclusivos vs compartidos; algoritmos estáticos, dinámicos y elásticos; Restricciones de tiempo real; Lotes, priorización, partición; descentralización mediante robo de trabajo y técnicas relacionadas.
- 8.
- Servicios: Implementar APIs web, moneda electrónica, sistemas de transacción, juegos multijugador.
Aprendizaje esperado (Learning Outcomes):
Core:
- 1.
- Diseñar, implementar, analizar y evaluar un componente o aplicación para X que opere en un contexto dado, donde X esté en uno de los dominios listados, por ejemplo, un algoritmo genético para el diseño de una planta de fábrica [Diseñar]
- 2.
- Criticar el diseño e implementación de un componente o aplicación existente, o uno desarrollado por compañeros de clase [Críticar (análisis crítico)]
- 3.
- Comparar el rendimiento y la eficiencia energética de múltiples implementaciones de un diseño similar, por ejemplo, multinúcleo versus clúster versus GPU [Comparar]