博文

目前显示的是 五月, 2025的博文

NVSHMEM官方文档部分内容总结

图片
Using NVSHMEM 1、NVSHMEM 简介 针对 CUDA 设备实现的基于 OpenSHMEM 的规范(PGAS 并行编程范式,partitioned global address space) OpenSHMEM 和 NVSHMEM 的区别 NVSHMEM 通信过程中所有的 buffer arguments 必须是对称的 Block 中线程进行 fetch 操作时只能保证数据的 weak ordering(如需强制顺序则要显式调用 nvshmem_fence,其会保证在 fence 之前的所有操作以保证内存一致性) 支持单边通信的方式:通过 Verbs API 或者 UCX 进行 IB 或 RoCE 传输 2、NVSHMEM 优点 支持多 GPU 间直接进行 data movement 或 synchronization,而无需考虑和 CPU 之间的互动之类的操作带来的 overhead 支持通过 composite kernel 实现 comp 和 comm 的 overlap 3、MPI 的问题 可能会引起 shared data 读写的 high locking/atomics overheads Message ordering 会引起 serialization overheads 接收方在发布描述符之前收到数据会引起 protocol overheads 4、NVSHMEM 对应的 addressing model(类似 PGAS) 一个 NVSHMEM job 中的所有 PE 必须同时被初始化,在 job 退出前也需要同时 finalize 通过 CPU-side NVSHMEM allocation API 可以在 GPU 上分配(必须是)大小相同的 shared symmetric memory(而其他方式开辟的内存则属于 private memory) 每个 PE 上的 symmetric memory 对其他 PE 均可见且可操作(通过 NVSHMEM API) 通过 NVSHMEM 分配 API(如 nvshmem_malloc )返回的对称内存地址对于调用该 API 的 PE 对应的 GPU 来说,是一个可以通过 CUDA API 或者 Load/Store 操作直接访问的有效内存地址。因此如果仅需要对本地 PE 的对称内存进行...