Autor: Vladas Saulis, PE Prodata, Klaipėda, Lituânia
18 de maio de 2024
Resumo
Este artigo apresenta um novo modelo de programação que pode utilizar sistemas de CPU multi-core de forma simples e autobalanceada. Este modelo também propõe um paradigma de programação mais fácil para o desenvolvimento de tarefas e sistemas paralelos na maioria das áreas de computação massivamente paralela, como previsão do tempo, física nuclear, motores de busca, etc.
Nos últimos tempos, estamos enfrentando uma nova mudança na filosofia da computação, causada pelo avanço de uma nova arquitetura de hardware e por um desempenho ainda melhor. A arquitetura multi-core se tornará uma tecnologia predominante em um futuro próximo.
O que podemos fazer para tirar vantagem disso? Este artigo é sobre uma das possíveis soluções que podemos ter.
O modelo de computação proposto (denominado “Modelo de Fluxo de Objetos”) também fornece algumas respostas às questões levantadas no conhecido artigo publicado em Berkeley [1]. Aqui está uma pequena lista de vantagens que podem ser alcançadas usando este modelo:
· Processo de programação simples e manutenção adicional
· Integração e migração natural de OPU (CPU) quando unidades de processamento de objetos (OPUs) podem ser adicionadas ou removidas instantaneamente
· Balanceamento de carga automático
· Não há necessidade de sincronização entre partes da tarefa
· Pouco ou nenhum bloqueio mútuo no nível do sistema
Todas essas características são implementadas na Parallel JavaScript Machine (PJM), que é descrita abaixo neste documento. PJM pode ser percebido como um mini sistema operacional que controla múltiplas tarefas JavaScript, múltiplos usuários e múltiplos consoles front-end.
Introdução
O principal objetivo do PJM (OS) é simplificar a programação paralela, introduzindo instruções especiais (dicas) que são representadas por comentários especificamente criados na forma de //#pragma .
A Parallel JavaScript Machine usa NodeJS e é implementada como um servidor Web para o frontend, bem como um servidor para as OPUs que realmente fazem a execução paralela do código. OPUs são pequenos clientes de rede JavaScript implementados também em NodeJS. Pode haver quantos deles forem necessários, conectados ao servidor da máquina paralela principal, local ou remotamente. O desempenho geral do processamento paralelo depende fortemente do número de OPUs conectadas.
Todas as partes do sistema, trabalhando juntas, podem ser entendidas como um mini-SO que inicia e analisa as tarefas JavaScript em execução, coloca seus pedaços na fila de execução do sistema e fornece algum tipo de multitarefa cooperativa entre os pedaços selecionados. Os resultados do cálculo são impressos no console do cliente Web canalizando a saída console.log das OPUs por meio do servidor principal. Cada OPU é atribuída à sua própria CPU (local ou remota) e funciona através de um escalonador round-robin simples (será explicado mais adiante). Isso é conseguido usando o módulo Node do gerenciador de processos PM2.
“Embora a compatibilidade com binários antigos e programas C seja valiosa para a indústria, e alguns pesquisadores estejam tentando ajudar os planos de produtos multicore a terem sucesso, temos pensado em ideias mais ousadas. Nosso objetivo é realizar milhares de processadores…”[1] não necessários em um único computador físico, mas em toda a rede, todos orquestrados pela unidade central do servidor. Do ponto de vista do sistema, todas as CPUs/OPUs estão operando através de protocolo de soquete de rede interno que não faz distinção entre CPUs locais e remotas. O servidor (PJM) e os clientes (OPUs) — todos escritos em JavaScript, portanto não são compatíveis com binários C [ainda].
Todos os programas paralelos executados em PJM não devem usar extensões JavaScript ES6 (devem usar ES5). É importante afirmar aqui que extensões como classes, funções de seta, let e consts e, especialmente, async/await dificilmente são paralelizáveis, exigindo uma pesquisa interna mais completa do JavaScript. É por isso que o PJM está rodando no NodeJS V8.2.1. Todos os módulos do nó estão bloqueados para esta versão para melhor desempenho e clareza de conceitos.
PJM é controlado e as tarefas são executadas usando o Web Console que reside em http://parallel-js.net:8888 . E aqui está como geralmente é:
O Web Console é escrito usando a estrutura ExtJS e conectado ao servidor PJM com o uso do módulo NodeJS express.js HTTP. Outra parte do Web Console (chamada Console e Mensagens) é conectada usando WebSockets. É aqui que a saída de todos os programas e as mensagens do sistema chegam em tempo real. É importante saber que nenhum cálculo real é realizado no Web Console — todos os cálculos são feitos no servidor PJM e nas OPUs.
…
Se você estiver interessado neste projeto, encontre o artigo completo aqui.
O código-fonte deste projeto está aqui.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3