NVSHMEM 不支持的操作#

本节介绍在使用 NVSHMEM 运行时开发应用程序时需要考虑的一些关键 NVSHMEM 不支持的操作。

工具链#

NVSHMEM 本身不支持使用 NVIDIA HPC C++ 编译器编译应用程序。

操作#

以下是不原生支持的操作列表,每个项目都包含解决方法

  • 主机端内存分配:NVSHMEM 不支持将主机内存作为其设备发起的通信操作的目标。目前没有从主机分配对称内存的流程。但是,主机内存可以注册到 NVSHMEM,并用作操作的本地操作数(put 操作的 src,get 操作的 dest)。用户可用的选项包括

    • 如果主机内存是远程操作数

      1. 使用 cudaMemcpyAsync 及其友元将数据从主机内存复制到对称堆。

      2. 完成设备操作到/从对称堆中的数据。

      3. 使用 cudaMemcpyAsync 及其友元将数据从对称堆复制回主机内存。

    • 如果主机内存是本地操作数

      1. 使用 nvshmemx_buffer_register 注册主机内存。

      2. 将注册的指针传递给所需的 NVSHMEM API。

      3. 当应用程序不再需要缓冲区时,在使用 nvshmemx_buffer_unregister 取消注册缓冲区后再释放它。

  • 如果仅主机实现就足够了,则可以在与仅主机的 SHMEM 应用程序相同的进程中初始化 NVSHMEM。主机内存可以由 SHMEM 分配,并与仅主机的 SHMEM API 一起使用。

  • 原子浮点最小值/最大值操作。

    可以使用 nvshmem_TYPENAME_OPERATION_reduce 模拟此操作。有关更多信息,请参阅支持的 reduce 操作表。