Chapel 2.3 发布,主要亮点包括:
- Python 互操作性:新增
Python
包模块,支持从 Chapel 调用 Python,可直接使用 NumPy 和 PyTorch 等库,还能在 Chapel 程序中嵌入可在运行时更改的 Python 代码,示例展示了创建 PyTorch 张量及动态修改操作的过程。 稀疏计算:
- 背景:Chapel 支持稀疏数组,用域表示非零索引,可共享,默认存储格式为 Coordinate (COO),也有其他格式,还支持分布式稀疏数组。其稀疏特性在 Chapel 2.0 稳定化工作中未涉及,现在得到改进和稳定。
- 近期改进:2.3 版本添加新接口,改进稀疏命名方案和布局类型,提高关键习惯用法的性能,如将表示 CSR 和 CSC 格式的类型从
CS(compressRows=true|false)
重命名为csrLayout
和cscLayout
,模块从LayoutCS
重命名为CompressedSparseLayout
,还添加了新的实用例程,如获取 COO 存储域的坐标、遍历块稀疏数组的本地子数组等,可通过MatMatMult.chpl
等文件查看稀疏特性的实际应用。
性能改进:
- Qthreads 任务处理改进:Chapel 通常使用 Qthreads 实现并行任务,2.3 版本升级到 1.21 版,加速了多种任务习惯用法,在 thread-ring 微基准测试和 CoMD 代理应用研究等中都有明显积极影响,感谢 Qthreads 团队的支持。
- Libfabric/OFI 优化:2.3 版本对
CHPL_COMM=ofi
进行了性能改进,包括通过流水线 PUT 提高远程缓存性能,使用非阻塞 PUT 改进on
语句性能,以及使用非阻塞 GET 提高大型数组传输性能,在 HPE Cray EX 上有显著效果,预计在其他使用CHPL_COMM=ofi
的平台上也有类似改进。
- 新 GPU 特性:支持供应商中立的 GPU 计算,2.3 版本添加两个新的 GPU 查询功能,
.gpuId
方法类似.id
用于获取 GPU 子区域的 ID,deviceAttributes()
函数用于查询低级 GPU 属性,还改进了@gpu.itersPerThread
属性,可实现循环迭代到线程的映射方式切换,目前正在努力实现 halting 功能和提供跨 GPU 的分布式数组。 - Dyno 编译器改进:团队致力于名为
dyno
的编译器改进工作,已取得一些成果,如更友好的错误消息、chplcheck
检查器和 Chapel 语言服务器 (CLS),下一个主要里程碑是完成新的增量类型和调用解析器,2.3 版本中该解析器在支持提升表达式、迭代器和域方面有显著进展。 - 更多信息:如有关于 Chapel 2.3 或其新功能的问题,可在 Chapel 的 Discourse 组或其他社区论坛咨询,欢迎反馈以改进 Chapel 语言、库、实现和工具。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。