
总是有希望在单个任务中使用更多计算能力。你的电脑现在肯定有多个 CPU,你的显卡甚至拥有更多 CPU。你的电脑可能已经与许多其他电脑联网。但是你该如何编写软件来利用这些优势呢?当然,有很多复杂的系统,但也有Chapel这样的系统。
Chapel 是一种相当简单的编程语言,但它支持各种形式的并行性。运行时控制着计算机(无论这意味着什么)之间的通信方式。您可以通过网络在本地 CPU、GPU 和其他处理单元上运行代码,而无需您进行太多工作。
它看起来是什么样子的?这是该项目主页上的一个简单的分布式程序:
// 为每个计算节点打印一条消息 在 Locales 中 coforall loc 在当地做 writeln("来自本地的问候", loc.id); // 每个计算节点的每个核心打印一条消息 在 Locales 中 coforall loc 在当地做 coforall tid in 0..<here.maxTaskPar do writeln("来自任务 ", tid, " 的问候,来自语言环境 ", loc.id);
你可能已经猜到了,Locale 是一个包含语言环境对象的数组,每个对象都描述了一些计算资源。coforall 语句将循环拆分成多个部分,以便在不同的语言环境或 CPU 上运行。你甚至可以编写 GPU 内核:
coforall (gpu, row) 在 zip(here.gpus, localRowStart..) 中在 gpu 上执行 {
您可以在浏览器中尝试,但为了获得最佳效果,建议您下载它或在容器中运行。它的许可证是 Apache 2.0,因此如果您愿意,甚至可以做出贡献。如果您真的想进行分布式工作,请务必获取为 GASNet 或 Slurm 构建的软件包。
虽然它是新的东西,但你可能会发现它比CUDA之类的东西更容易、更普遍适用。
原文: https://hackaday.com/2025/07/06/going-to-the-parallel-chapel/