Autor: Vladas Saulis, PE Prodata, Klaipėda, Lituania
18 de mayo de 2024
Abstracto
Este artículo presenta un nuevo modelo de programación que puede utilizar sistemas de CPU multinúcleo de una manera sencilla y autoequilibrada. Este modelo también propone un paradigma de programación más sencillo para desarrollar tareas y sistemas paralelos en la mayoría de las áreas de computación paralela masiva, como la predicción del tiempo, la física nuclear, los motores de búsqueda, etc.
En los últimos tiempos nos enfrentamos a un nuevo cambio en la filosofía informática, provocado por el avance de una nueva arquitectura de hardware y un rendimiento aún mejor. La arquitectura multinúcleo se convertirá en la tecnología predominante en un futuro próximo.
¿Qué podemos hacer para aprovechar esto? Este artículo trata sobre una de las posibles soluciones que podemos tener.
El modelo informático propuesto (que se denomina “Modelo de flujo de objetos”) también proporciona algunas respuestas a las preguntas planteadas en el conocido artículo publicado en Berkeley [1]. A continuación se muestra una breve lista de ventajas que se pueden alcanzar utilizando este modelo:
· Proceso de programación simple y mantenimiento adicional
· Integración y migración natural de OPU (CPU) cuando las unidades de procesamiento de objetos (OPU) se pueden agregar o eliminar sobre la marcha
· Equilibrio de carga automático
· No es necesario sincronizar las partes de la tarea
· Poco o ningún bloqueo mutuo a nivel del sistema
Todas estas características se implementan en la máquina JavaScript paralela (PJM), que se describe a continuación en este documento. PJM puede percibirse como un mini sistema operativo que controla múltiples tareas de JavaScript, múltiples usuarios y múltiples consolas frontales.
Introducción
El objetivo principal de PJM (OS) es simplificar la programación paralela mediante la introducción de instrucciones especiales (sugerencias) que están representadas por comentarios específicamente diseñados en forma de //#pragma .
La máquina JavaScript paralela utiliza NodeJS y se implementa como un servidor web para el frontend, así como un servidor para las OPU que realmente realizan la ejecución paralela del código. Las OPU son pequeños clientes de red JavaScript implementados también en NodeJS. Podrán existir tantos como sea necesario, conectados al servidor principal de la máquina paralela de forma local o remota. El rendimiento general del procesamiento paralelo depende en gran medida de la cantidad de OPU conectadas.
Todas las partes del sistema, trabajando juntas, pueden entenderse como un mini-OS que inicia y analiza las tareas de JavaScript en ejecución, coloca sus fragmentos en la cola de ejecución del sistema y proporciona algún tipo de multitarea cooperativa entre los fragmentos seleccionados. Los resultados del cálculo se imprimen en la consola del cliente web canalizando la salida de console.log desde las OPU a través del servidor principal. Cada OPU está asignada a su propia CPU (local o remota) y funciona a través de un simple programador por turnos (se explicará más adelante). Esto se logra mediante el uso del módulo Nodo del administrador de procesos PM2.
“Aunque la compatibilidad con binarios antiguos y programas C es valiosa para la industria, y algunos investigadores están tratando de ayudar a que los planes de productos multinúcleo tengan éxito, hemos estado pensando en ideas más audaces. Nuestro objetivo es realizar miles de procesadores…”[1] no necesarios en una única computadora física, sino en toda la red, todo orquestado por la unidad central del servidor. Desde el punto de vista del sistema, todas las CPU/OPU funcionan a través del protocolo de socket de red interno que no hace distinción entre CPU locales y remotas. El servidor (PJM) y los clientes (OPU): todos escritos en JavaScript, por lo que no es compatible con los binarios C [todavía].
Todos los programas paralelos que se ejecutan en PJM no deben usar extensiones de JavaScript ES6 (deben usar ES5). Es importante señalar aquí que extensiones como clases, funciones de flecha, lets y consts y, especialmente, async/await difícilmente son paralelizables, lo que requiere una investigación interna más exhaustiva de JavaScript. Es por eso que PJM se ejecuta en NodeJS V8.2.1. Todos los módulos de nodo están bloqueados en esta versión para un mejor rendimiento y claridad de conceptos.
PJM se controla y las tareas se ejecutan mediante la consola web que reside en http://parallel-js.net:8888. Y así es como suele verse:
La consola web está escrita utilizando el marco ExtJS y conectada al servidor PJM con el uso del módulo express.js HTTP NodeJS. Otra parte de Web Console (llamada Consola y Mensajes) se conecta mediante WebSockets. Aquí es donde llegan todos los mensajes del sistema y la salida de los programas en tiempo real. Es importante saber que no se realizan cálculos reales en la consola web; todos los cálculos se realizan en el servidor PJM y las OPU.
…
Si está interesado en este proyecto, encuentre el artículo completo aquí.
El código fuente de este proyecto está aquí.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3