If you're seeing this message, it means we're having trouble loading external resources on our website.

Si estás detrás de un filtro de páginas web, por favor asegúrate de que los dominios *.kastatic.org y *.kasandbox.org estén desbloqueados.

Contenido principal

Ensaya computación paralela tú mismo

Ahora que ya hemos discutido computación paralela en teoría, veámosla en acción. Normalmente, cuando un ingeniero quiere ejecutar una solución de computación paralela, usará computadoras dedicadas de alto rendimiento.
Sin embargo, gracias a la tecnología web moderna, también podemos hacer computación paralela en nuestro navegador. Así es, puedes ver tareas ejecutando en paralelo desde la comodidad de tu propia casa o salón de clase. ¿Listo?
Visita el enlace de abajo para ensayar un programa paralelizado de detección de gatos:

Configuración del programa

El objetivo de una solución de computación paralela es mejorar la eficiencia. Es útil tener parámetros que podamos cambiar para observar los efectos.
Este programa provee dos parámetros.
  • Número de hilos de trabajadores: para ejecutar las tareas en paralelo, este programa usa una tecnología de navegador llamada trabajadores web. La página web detecta cuántos
    puede ejecutar tu computadora concurrentemente basado en lo que indica tu hardware, y sugiere usar dicho número de trabajadores. Sin embargo, también te permite ensayar menos trabajadores para que puedas ver su efecto sobre la aceleración.
  • Número de imágenes: generalmente, hay un mayor beneficio de procesamiento paralelo cuando es con conjuntos más grandes de datos, por lo que el programa por defecto procesa el máximo número de imágenes. Si lo deseas, puedes pedirle que procese menos imágenes y observar la diferencia en rendimiento.

Monitoreo de la ejecución

Ver un programa paralelo ejecutar es como ver una carrera de relevos. ¿Cuánto tiempo tardará el programa? ¿Cuál trabajador completará más trabajo más rápido? Es muy emocionante.
Puedes ver el progreso de los trabajadores en el gráfico de la página web. El programa comienza con una configuración corta, una porción secuencial que inicializa el arreglo de imágenes y pone las tareas en cola. ¡Y entonces los trabajadores empiezan la carrera!
GIF con animación que muestra el progreso de 4 trabajadores que procesan múltiples imágenes.
En muchas computadoras, también puedes monitorear la actividad de tu CPU al mismo tiempo, de manera que ves cómo está siendo usado tu CPU y cómo está distribuido el trabajo sobre los núcleos de tu CPU.
Aquí está lo que reporta mi computadora portátil cuando el programa corre con cuatro trabajadores.
Dos capturas de pantalla lado a lado. La primera captura de pantalla se titula "Historial de CPU" y muestra cuatro filas de gráficos de barras, donde el gráfico inicia en solo alrededor de 30% del área y luego 100% del área. La segunda captura de pantalla se titula "Monitor de actividades" y muestra una lista de procesos con columnas para "% CPU", "Tiempo de CPU" e "Hilos". El primer proceso es "Google Chrome Helper" y muestra un "% de CPU" de 294,6%.
Una vez que los trabajadores arrancan, el historial del CPU muestra que el uso se dispara hasta el 100% para los 4 núcleos. El monitor de actividad muestra que los procesos de Chrome usan más de 320% del CPU (cada núcleo tiene su propio 100%) y los procesos del sistema usan el resto.
Cuando solo utilizo mi computador portátil para escribir un artículo, el monitor de actividades típicamente reporta que la mayoría del CPU no está en uso. Este programa paralelizado definitivamente la pone a trabajar.

Calculo de aceleración

¿Exactamente cuánto más eficiente es este programa cuando se ejecuta en paralelo? Averigüémoslo calculando la aceleración: la razón del tiempo que toma ejecutar el programa secuencialmente entre el tiempo que toma ejecutar el programa paralelizado. Dado que tenemos la opción de ensayar el programa con diferentes números de trabajadores paralelos (tantos como permite nuestro hardware), podemos calcular la aceleración para cada número de trabajadores.
Primero ejecutamos el programa con el máximo número de imágenes para cada número de trabajadores y registramos la duración cada vez.
Aquí están cuatro ejecuciones en mi portátil:
TrabajadoresDuración (segundos)
153.91
232.95
328.81
427.66
Ejecutar el programa secuencialmente es básicamente lo mismo que hacerlo con un solo trabajador, por tanto podemos calcular la aceleración dividiendo la primera duración entre cada una de las otras duraciones.
TrabajadoresDuración (segundos)Aceleración
153.911
232.95(53.1/32.95)=1.64
328.81(53.91/28.81)=1.7
427.66(53.91/27.66)=1.95
También podemos graficar la aceleración para visualizar cómo cambia a medida que aumenta el número de trabajadores:
Un gráfico con el número de trabajadores en el eje x y aceleración en el eje y-. Se grafican cuatro puntos: [1, 1], [2, 1.64], [3, 1.87], [4, 1.95].
🔍 Prueba ésto desde la computadora que usas ahora. ¿Cómo se comparan los resultados? Si hay diferencias grandes, ¿qué crees que es responsable de esas diferencias?

Factores que afectan el rendimiento

Mi computadora llegó cerca a una aceleración de 2x pero ni cerca a una aceleración de 4x que es lo que podríamos haber esperado con 4 trabajadores. ¿Por qué no?
Hay muchos factores que pueden afectar el tiempo que tarda la computadora en ejecutar el programa:

Hiperhilado

A pesar que mi computadora reporta que puede ejecutar cuatro hilos simultáneamente, descubrí que mi CPU solo tiene dos núcleos.
Captura de la pantalla de información del sistema Apple con el título de "Hardware Overview" y la siguiente tabla:
ColumnaValor
Nombre del modelo:MacBook Pro
Identificador del modelo:MacBookPro14,
Nombre del procesador:Intel Core i5
Velocidad del procesador:3. GHz
Número de procesadores:1
Número total de núcleos:2
Detalles de hardware en la descripción de sistema de mi computadora portátil Apple
Sin embargo, estos dos núcleos usan una tecnología llamada hiperhilado que le permite a un solo núcleo de CPU ejecutar dos hilos simultáneamente. Como Intel es un fabricante muy popular de CPUs, muchas computadoras personales ahora vienen con CPUs hiperhilados.
El hiperhilado funciona bien cuando dos hilos están haciendo diferentes tipos de computación. Por ejemplo, una tarea podría estar haciendo operaciones aritméticas mientras que la otra procesa datos de entrada. Estas dos tareas utilizan diferentes partes del CPU y pueden ser aceleradas con hiperhilado. Sin embargo, si dos tareas están ejecutando instrucciones idénticas, el hiperhilado no puede acelerarlas.
El hecho de que mi portátil tiene solo dos núcleos físicos (hiperhilados) es la explicación más probable de por qué la aceleración se acerca a dos, pero nunca se acerca a cuatro.
🔍 Si observas un comportamiento similar en tu máquina, investiga un poco para ver cuántos núcleos fisicos tiene el CPU.

Otras actividades del CPU

Cuando este programa corre desde un navegador web en una computadora, compite por tiempo de CPU con otros procesos.
Antes de iniciar el programa en mi computadora portátil, el CPU ya estaba corriendo más de 400 procesos, una mezcla de procesos del sistema y aplicaciones de usuario:
Captura de pantalla del Monitor de actividades Apple. El centro muestra una gráfica de área titulada "Carga de CPU".
El lado izquierdo muestra esta tabla:
ColumnaValor
Sistema:7.76%
Usuario:15.27%
Desocupado:76.97%
El lado derecho muestra esta tabla:
ColumnaValor
Hilos:2968
Procesos:484
Puede ser confuso escuchar que una computadora con 2 núcleos puede correr más de 400 procesos a la vez. La mayoría de las veces, cuando una computadora ejecuta múltiples procesos "a la vez", en realidad está conmutando rápidamente entre ellos, tan rápidamente que el usuario no se da cuenta. Cuando una computadora ejecuta dos procesos realmente en paralelo, ya no necesita conmutar entre ellos.
El programa no puede terminar tan rápido cuando el CPU también ejecuta instrucciones de otros procesos, pero es difícil saber exactamente cuánto afecta esto a la duración del programa. Esa incertidumbre afecta nuestras mediciones de aceleración, dado que la ejecución con 4 trabajadores puede haber sido afectada más o menos por otras actividades de CPU, comparada con la ejecución con un trabajador.
🔍 Para tener mediciones más precisas, cierra tantas otras aplicaciones como sea posible y espera a que el monitor de CPU muestre niveles muy bajos de actividad. Luego pulsa ese botón y ve qué sucede cuando se liberan más recursos de CPU en tu computadora para trabajar en el programa.

Actualizaciones de la interfaz de usuario

La página web que ejecuta este programa incluye muchos elementos visuales: el gráfico que se actualiza constantemente, las imágenes y sus indicadores de carga, el texto de estado. Cada vez que una página web necesita actualizar un elemento visual, el CPU trabaja para calcular los nuevos píxeles y desplegarlos en la pantalla. Ese trabajo adicional ralentiza el tiempo de ejecución.
Como experimento, deshabilité las actualizaciones de la interfaz de usuario en el programa y vi que la duración bajó de 30 a 22 segundos, una disminución significativa.
🔍 Prueba por ti mismo en esta versión sin IU del programa de detección de gatos.

Mejorar el rendimiento

Ahora que hemos explorado a fondo el rendimiento de este programa paralelizado, tenemos una idea mejor de cómo mejorar el rendimiento. Si estuviésemos ejecutando este programa en un entorno de producción, como para una empresa o un proyecto de investigación, entonces podríamos hacer los siguientes cambios:
  • Usar hardware con el mayor número posible de núcleos físicos de CPU. Más núcleos físicos significa más tareas que se pueden ejecutar verdaderamente en paralelo.
  • Ejecutar el programa en una máquina dedicada, una computadora que no esté ejecutando otros procesos de usuario. Todavía tendrá unos pocos procesos del sistema operativo, pero nunca tantos como en una computadora típica de hogar.
  • Ejecutar el programa desde la linea de comandos, no desde una página web. El eliminar la interfaz gráfica del usuario elimina la necesidad de actualizar la IU.
🤔 ¿Qué otras ideas tienes para mejorar el programa?

🙋🏽🙋🏻‍♀️🙋🏿‍♂️¿TIenes alguna pregunta sobre este tema? ¡Nos encantaría responderte; tan solo pregunta en el área de preguntas más abajo!

¿Quieres unirte a la conversación?

Sin publicaciones aún.
¿Sabes inglés? Haz clic aquí para ver más discusiones en el sitio en inglés de Khan Academy.