#run-time #hpc #heterogeneous #gpu #fpga #memory-buffer #shared-memory

mcl-rs

此系统crate提供了Rust语言对Minos计算库(MCL)的高级绑定

6个版本

0.2.0 2023年6月23日
0.2.0-rc32023年2月24日
0.1.2 2022年4月2日

#1031 in 硬件支持

31 每月下载量

自定义许可证

5.5MB
24K SLoC

C 21K SLoC // 0.1% comments Rust 1.5K SLoC // 0.2% comments Automake 521 SLoC // 0.0% comments Shell 172 SLoC // 0.0% comments M4 83 SLoC // 0.6% comments BASH 43 SLoC C++ 29 SLoC Perl 11 SLoC // 0.5% comments Batch 10 SLoC // 0.3% comments GNU Style Assembly 7 SLoC // 0.4% comments

mcl-rs

此项目托管MCL Rust绑定的高级包装器。

摘要

此crate为MCL提供高级、Rust友好的绑定。这些绑定的目的是提供一个更用户友好(且更安全)的API,它提供了对低级libmcl-sys API的访问。它为大多数mcl公共函数提供包装器,并试图在编译时提供安全性。然而,由于库依赖于C项目,有些情况下只能在运行时捕获错误,还有一些API目前无法进行检查,因此被标记为不安全(但通过功能标志受到保护)。

构建mcl-rs

所需库/crate

  • libmcl-sys及其依赖项
    • Clang
    • OpenCL
    • Autotools
    • MCL(手动安装或通过cargo install mcl_sched
  • 在Cargo.toml中列出的其他crate

说明

mcl-rs依赖于crate libmcl-sys,它提供MCL C库和这些高级绑定之间的低级绑定。

libmcl-sys使用clang从MCL头文件生成低级Rust绑定,因此如果clang不可用,必须将其安装到系统中。

  1. 安装clang

处理完所有依赖项后,我们可以构建mcl-rs。

  1. cargobuild --release

安装MCL调度器

可以通过以下方式轻松安装MCL调度器

cargo install mcl_sched

注意,如果您已从C源代码手动构建MCL,您将已经在MCL安装目录中拥有mcl_sched二进制文件。您可以使用手动构建的mcl_sched或通过cargo安装的mcl_sched。

功能标志

我们重新暴露了三个功能标志(来自libmcl-rs),大致对应于底层MCL C库的配置选项

  1. mcl_debug - 启用底层MCL C库的调试日志输出
  2. shared_mem - 启用进程间主机共享内存缓冲区 -- 这将启用一些不安全的API
  3. pocl_extensions - 启用基于进程间设备的共享内存缓冲区,需要已成功安装修补版的POCL 1.8(更多信息请参见https://github.com/pnnl/mcl/tree/dev#using-custom-pocl-extensions)-- 这将启用一些不安全的API

测试

mcl-rs附带一系列单元测试,可以使用以下命令执行

cargo test <test_name>

提醒:执行测试时,MCL调度器应该正在运行。如果您通过cargo安装了mcl_sched,则可以直接调用

 mcl_sched

如果您手动构建了mcl,可能需要指定mcl_sched二进制文件的路径

移除测试名称将导致cargo运行所有可用的测试,但是,由于测试会并行运行,可能会造成多个线程同时尝试获取mcl_scheduler shmem对象,这可能会导致失败。

文档

使用cargo doc --open来构建并打开此crate的文档。

状态

MCL、libmcl-sys和mcl-rs是研究原型,仍在开发中,因此并非所有预期的功能都已实现。

联系方式

如果您有任何关于MCL的问题,请与PNNL的Roberto Gioiosa联系([email protected])。有关Rust相关问题的请与PNNL的Ryan Friese联系([email protected]

MCL-Rust团队

Roberto Gioiosa
Ryan Friese
Polykarpos Thomadakis

许可证

本项目采用BSD许可证 - 请参阅LICENSE文件以获取详细信息。

参考文献

如果您希望引用MCL,请使用以下参考文献

  • Roberto Gioiosa,Burcu O. Mutlu,Seyong Lee,Jeffrey S. Vetter,Giulio Picierro,和Marco Cesati。2020. Minos计算库:用于极异构系统的有效并行编程。在2020年第13届年度通用图形处理单元(GPGPU '20)研讨会论文集中。纽约,纽约,美国,ACM计算机协会,1–10。DOI:https://doi.org/10.1145/3366428.3380770

其他利用或描述MCL其他特性的工作

  • A. V. Kamatar,R. D. Friese和R. Gioiosa,“可扩展异构环境的局部性感知调度”,2020年IEEE/ACM国际超级计算机运行时和操作系统研讨会(ROSS),2020年,第50-58页,doi:10.1109/ROSS51935.2020.00011。
  • Rizwan Ashraf和Roberto Gioiosa,“探索在科学应用中使用新型空间加速器”,2022年ACM/SPEC国际性能工程(ICPE)会议,2022年。

依赖关系

~4.5–7.5MB
~138K SLoC