机器内通信
CUDA IPC(Inter-Process Communication)
定位:同一节点(单机)内多进程间的 GPU 内存共享。
核心功能:
允许不同 CUDA 进程直接访问彼此的 GPU 显存,无需通过主机内存复制。
使用 cudaIpcGetMemHandle 和 cudaIpcOpenMemHandle 等 API 创建和共享内存句柄。
特点:
低延迟:直接访问 GPU 显存,减少数据传输开销。
进程级隔离:需显式传递句柄并协调同步,适合紧密协作的多进程应用(如多进程推理服务)。
适用范围:单机多 GPU,例如共享数据的多个独立进程(如 MPI 进程)。
局限性:仅支持同一节点内通信,开发者需自行管理同步与一致性。
机器间通信
NVSHMEM(NVIDIA SHMEM)
定位:多 GPU/多节点的高性能通信库,基于 PGAS(分区全局地址空间) 模型。
核心功能:
提供全局地址空间,允许 GPU 直接读写其他 GPU 的显存(无论本地或远程)。
支持集合操作(Broadcast、Reduce)、原子操作、异步数据传输。
特点:
跨节点扩展:支持多节点集群,结合 NCCL 或 MPI 实现高效通信。
抽象层次高:隐藏底层通信细节(如 CUDA IPC 或 InfiniBand),简化分布式 GPU 编程。
适用场景:大规模并行计算(如 AI 训练、科学模拟),需多 GPU 协同作业。
优势:
减少数据移动,提升吞吐量。
提供类似共享内存的编程模型,降低分布式编程复杂度。