El arte de la programación concurrente y paralela
Raúl G. Roa Gómez
Quién es Raúl Roa?
Programo desde los ~14 años
Hobbies:
— Fútbol
— Ajedrez
— Discos de vinilo
Perfil Académico
Pontificia Universidad Católica Madre y Maestra (2007)
Ingeniería en Sistemas y Computación (ISC)
Rochester Institute of Technology (2009)
M.S. Software Engineering
The Guildhall at Southern Methodist University (2014)
M.I.T. Digital Game Development — Software Engineering
Dossier
DCGames — Primera comunidad de videojuegos en R.D. (Adquirida por Verizon Dominicana)
Virtual Reality — Lucky's Tale (único juego incluido en la plataforma de Oculus)
Game Development — Identity, With strange aeons, Boom!, Creativerse.
Web Dev/Desktop — Sistemas de marbetes, sistema de generación de notificaciones por Omisión y Morosidad, etc.
OSS — fog, emscripten, SOIL, ResIL, DevIL
Primero que nada...

Concurrencia != Paralelismo
(...Más o menos)
- Dos eventos son "concurrentes" si ambos ocurren en el mismo intervalo de tiempo.
- Dos tareas que se ejecutan en el mismo intervalo de tiempo, son tareas concurrentes.
-
1 Procesador
- Dos o más acciones en progreso al mismo tiempo.
-
Múltiples Procesadores
- Dos o más acciones de forma simultánea.
Concurrencia != Paralelismo
Simultáneo == Paralelo!

Concurrente
Paralelo
-
La concurrencia se asemeja a la manera en que las cosas funcionan en el mundo real.
-
La concurrencia puede ser asociada con más en menos tiempo.
- Velocidad.
Más rápido == Mejor
Motivación

Queremos más velocidad? Levanten las manos quienes quieren más velocidad!
El rol del CPU
- Unidad central de procesamiento
- Ejecutar instrucciones de un programa
- I/O + Operaciones lógicas/aritméticas
Instrucción (Instruction): Secuencia de bits en un formato específico para instruir al computador a ejecutar una operación específica.
Programa (Program): Secuencia de instrucciones para ejecutar una tarea específica en un computador.
Reloj (Clock): Regula la frecuencia y la velocidad a la que un computador ejecuta las instrucciones.
Conteo de transistores (Transistor count): Cantidad de transistores dentro del procesador. Mide la complejidad del mismo.
Terminología

Evolución
Arquitectura de von Neumann

Ley de Moore
El número de transistores que se pueden colocar a bajo costo en un circuito integrado se duplica aproximadamente cada dos años.

Entonces, por qué estamos aquí?
Andy giveth, and Bill taketh away.
- La velocidad del reloj no es la única métrica para medir rendimiento.
- Mejor control de flujo quiere decir mas trabajo por ciclo.
- El software siempre tendrá la necesidad de consumir más recursos.
- El software siempre tendrá la necesidad de ser más rápido.
- Las optimizaciones implícitas no pueden ser controladas.
- La evolución del hardware no está en nuestras manos.
- Los compiladores no pueden abstraer todo.
Andy giveth, and Bill taketh away.
Ley de Amdahl's
La mejora obtenida en el rendimiento de un sistema debido a la alteración de uno de sus componentes está limitada por la fracción de tiempo que se utiliza dicho componente.
El almuerzo gratis terminó

La Meta
- Cambiar al paradigma del "paralelismo"
- Hacer que el CPU haga menos trabajo
- Optimizar control de flujo
- Optimizar el consumo de memoria para caching.
- Elegir el grupo de instrucciones correcto para el tipo de programa.
Evolución implícita del almuerzo gratis


La jungla
Trifecta
Multicore
Cores elásticos en la nube
Cores heterogeneos
Cores heterogéneos
- Amplifica el concepto de múltiples cores.
- Pone a nuestra disposición 100x and 1,000x más paralelismo.
- Disopnible en la mayoría de nuestros dispositivos: GPU
Cores elásticos en la nube
- Elimina el concepto de "dispositivo".
- Cantidad elástica de multiples cores y cores heterogéneos a nuestra disposición.

Fuerza Bruta

Hacking MD5 Passwords

MD5 (abreviatura de Message-Digest Algorithm 5, Algoritmo de Resumen del Mensaje 5) es un algoritmo de reducción criptográfico de 128 bits ampliamente usado.
Ejemplo:
MD5("PUCMM") = 3c10bcc343e9d78a5a198d6d795e0c75
¡Advertencia! |
|
abaaa
...
abbaa
5 caracteres (minúsculas)
abaaa
...
ab7aa
5 caracteres (minúsculas + números)
abaaa
...
ab7aa
5 caracteres (mayúsculas + minúsculas + números)
ab
aab
abaa
abaaa
...
ab7aa
Hasta* 5 caracteres (mayúsculas + minúsculas + números)
Hipotéticamente
- Posición siendo evaluada
- Grupo de caracteres
- Longitud
Qué dividir?
Implementación
- No hay intercambio constante de data entre contextos.
- Múltiples procesadores.
- Múltiples threads.
- Múltiples nodos.


PUCMM
hello
Resultados
- La tendencia es que el hardware se convierta en paralelo, heterogeneo y distribuido de manera permamente.
- Es un buen momento para evaluar el diseño de nuestras aplicaciones e identificar que partes se pueden beneficiar del paradigma concurrente/paralelo.
- Para continuar disfrutando del "almuerzo gratis" en las plataformas actuales y posiblemente las del futuro es necesario que el paralelismo y la concurrencia sean partes escenciales del diseño.
Conclusión
-
Github — http://github.com/rroa
-
Blog — http://mrroa.com
-
Portafolio — http://portfolio.mrroa.com
-
LinkedIn — http://linkedin.com/in/raulroa
Contacto
El arte de la programación concurrente y paralela
By Raúl G. Roa Gómez
El arte de la programación concurrente y paralela
- 316