NVSHMEM 不支持的操作#
本节介绍在使用 NVSHMEM 运行时开发应用程序时需要考虑的一些关键 NVSHMEM 不支持的操作。
工具链#
NVSHMEM 本身不支持使用 NVIDIA HPC C++ 编译器编译应用程序。
操作#
以下是不原生支持的操作列表,每个项目都包含解决方法
主机端内存分配:NVSHMEM 不支持将主机内存作为其设备发起的通信操作的目标。目前没有从主机分配对称内存的流程。但是,主机内存可以注册到 NVSHMEM,并用作操作的本地操作数(put 操作的 src,get 操作的 dest)。用户可用的选项包括
如果主机内存是远程操作数
使用
cudaMemcpyAsync
及其友元将数据从主机内存复制到对称堆。完成设备操作到/从对称堆中的数据。
使用
cudaMemcpyAsync
及其友元将数据从对称堆复制回主机内存。
如果主机内存是本地操作数
使用
nvshmemx_buffer_register
注册主机内存。将注册的指针传递给所需的 NVSHMEM API。
当应用程序不再需要缓冲区时,在使用
nvshmemx_buffer_unregister
取消注册缓冲区后再释放它。
如果仅主机实现就足够了,则可以在与仅主机的 SHMEM 应用程序相同的进程中初始化 NVSHMEM。主机内存可以由 SHMEM 分配,并与仅主机的 SHMEM API 一起使用。
原子浮点最小值/最大值操作。
可以使用
nvshmem_TYPENAME_OPERATION_reduce
模拟此操作。有关更多信息,请参阅支持的 reduce 操作表。