作者:Vladas Saulis,PE Prodata,克莱佩达,立陶宛
2024年5月18日
摘要
本文提出了一种新的编程模型,可以以简单且自动平衡的方式利用多核 CPU 系统。该模型还提出了一种更简单的编程范式,用于在大多数大规模并行计算领域(例如天气预报、核物理、搜索引擎等)开发并行任务和系统。
近年来,由于新硬件架构的进步和更好的性能,我们面临着计算理念的新转变。多核架构将在不久的将来成为主流技术。
我们可以做什么来利用这个优势?本文是关于我们可能拥有的解决方案之一。
所提出的计算模型(称为“对象流模型”)还为伯克利著名论文[1]中提出的问题提供了一些答案。以下是使用此模型可以实现的优点的简短列表:
· 简单的编程过程和进一步的维护
· 可以动态添加或删除对象处理单元 (OPU) 时的自然 OPU (CPU) 集成和迁移
· 自动负载平衡
· 任务各部分之间无需同步
· 系统级别很少或没有互锁
所有这些特性都在并行 JavaScript 机 (PJM) 中实现,本文档下面对此进行了描述。 PJM 可以被视为一个迷你操作系统,它控制多个 JavaScript 任务、多个用户和多个前端控制台。
简介
PJM (OS) 的主要目标是通过引入特殊指令(提示)来简化并行编程,这些指令以 //#pragma .
并行 JavaScript 机器使用 NodeJS,并被实现为前端的 Web 服务器,以及真正并行执行代码的 OPU 的服务器。 OPU 也是用 NodeJS 实现的小型 JavaScript 网络客户端。它们可以根据需要有任意多个,本地或远程连接到主并行机服务器。并行处理的整体性能很大程度上取决于连接的 OPU 的数量。
所有系统部件一起工作,可以被理解为一个迷你操作系统,它启动并解析正在运行的 JavaScript 任务,将它们的块放入系统执行队列中,并在选定的块之间提供某种协作多任务处理。通过主服务器将 OPU 的 console.log 输出管道化,将计算结果打印到 Web 客户端的控制台。每个 OPU 都分配给自己的 CPU(本地或远程),并通过简单的循环调度程序进行工作(稍后将进行解释)。这是通过使用 PM2 流程管理器 Node 模块来实现的。
“尽管与旧的二进制文件和 C 程序的兼容性对行业很有价值,并且一些研究人员正在努力帮助多核产品计划取得成功,但我们一直在思考更大胆的想法。我们的目标是实现数千个处理器……”[1] 不需要在单个物理计算机上,而是在整个网络中,所有这些都由中央服务器单元协调。从系统的角度来看,所有 CPU/OPU 都通过内部网络套接字协议进行操作,该协议不区分本地和远程 CPU。服务器 (PJM) 和客户端 (OPU) — 全部用 JavaScript 编写,因此它与 C 二进制文件不兼容。
所有在 PJM 中运行的并行程序不得使用 ES6+ JavaScript 扩展(必须使用 ES5)。在这里需要指出的是,诸如 类、箭头函数、let 和 const,尤其是 async/await 之类的扩展很难并行化,需要更彻底的 JavaScript 内部研究。这就是 PJM 在 NodeJS V8.2.1 上运行的原因。所有节点模块都锁定到此版本,以获得更好的性能和概念清晰度。
PJM 是通过位于 http://parallel-js.net:8888 的 Web 控制台进行控制和运行的。它通常是这样的:
Web 控制台是使用 ExtJS 框架编写的,并使用 express.js HTTP NodeJS 模块连接到 PJM 服务器。 Web 控制台的另一部分(称为控制台和消息)使用 WebSockets 连接。这是所有程序的输出和系统消息实时到达的地方。重要的是要知道,Web 控制台中没有执行任何真正的计算 - 所有计算都是在 PJM 服务器和 OPU 上完成的。
…
如果您对这个项目感兴趣,请在此处找到完整的文章。
这个项目的源代码在这里。
以上是并行 JavaScript 机的详细内容。更多信息请关注PHP中文网其他相关文章!