作者: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中文網其他相關文章!