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.

S_{latency} (s) = \frac{1}{1-p + \frac{p}{s}}
Slatency(s)=11p+psS_{latency} (s) = \frac{1}{1-p + \frac{p}{s}}

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

26 x 26 x 26 x 26 x 26 = 26 ^5 = 11,881,376
26x26x26x26x26=265=11,881,37626 x 26 x 26 x 26 x 26 = 26 ^5 = 11,881,376

5 caracteres (minúsculas)

abaaa

...

ab7aa

36 x 36 x 36 x 36 x 36 = 36 ^5 = 60,466,176
36x36x36x36x36=365=60,466,17636 x 36 x 36 x 36 x 36 = 36 ^5 = 60,466,176

5 caracteres (minúsculas + números)

abaaa

...

ab7aa

62 x 62 x 62 x 62 x 62 = 62 ^5 = 916,132,832
62x62x62x62x62=625=916,132,83262 x 62 x 62 x 62 x 62 = 62 ^5 = 916,132,832

5 caracteres (mayúsculas + minúsculas + números)

ab

aab

abaa

abaaa

...

ab7aa

62^1 + 62^2 + 62^3 + 62^4 + 62^5 = 931,151,402
621+622+623+624+625=931,151,40262^1 + 62^2 + 62^3 + 62^4 + 62^5 = 931,151,402

Hasta* 5 caracteres (mayúsculas + minúsculas + números)

t = 30,537_{segs} = 508_{hours} = 21_{days}
t=30,537segs=508hours=21dayst = 30,537_{segs} = 508_{hours} = 21_{days}

Hipotéticamente

d = 916,132,832
d=916,132,832d = 916,132,832
v = 30,000_{pass/segs}
v=30,000pass/segsv = 30,000_{pass/segs}
t = d / v
t=d/vt = d / v
  1. Posición siendo evaluada
     
  2. Grupo de caracteres
     
  3. Longitud

Qué dividir?

Implementación

  • No hay intercambio constante de data entre contextos.
    1. Múltiples procesadores.
    2. Múltiples threads.
    3. 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