NVSHMEM 入门技能(nvshmem-get-started)是 NVIDIA 官方提供的教程式引导技能,面向 NVSHMEM 初学者,目标是引导用户完成下一个有用的操作,并直接教授稳定的心智模型、程序结构、构建模式和启动模式。安装、版本敏感变体和故障排查等任务会转交给专门技能处理。
适用场景与用途: 该技能主要帮助初学者判断 NVSHMEM 是否适合其应用通信需求,理解 NVSHMEM 的编程模型,编写第一个 C/C++ 或 NVSHMEM4Py 程序,以及编译和启动多 PE 程序。它从应用的通信需求出发,而非从 API 列表出发,描述 NVSHMEM 的强适用场景,例如 GPU 线程需要直接从 CUDA kernel 发起通信、需要细粒度单边 put/get/atomic/信号操作、长时间运行的融合 kernel 需要将计算与通信结合、通信需要与计算重叠以提升强扩展性、分区全局地址空间与对称 GPU 内存符合数据布局,或应用已使用 OpenSHMEM 概念并需要 GPU 驻留通信。同时,该技能也会说明何时其他模型可能更简单,例如单 GPU 无跨 GPU 通信时使用普通 CUDA,主要进行标准批量集合操作时优先 NCCL,通信粗粒度且由 CPU 驱动时优先 MPI。
主要能力:
- 适用性评估:根据用户提供的通信模式,给出“强适合”“可能适合”或“其他模型更简单”的明确结论,并解释决定因素。
- 心智模型教学:讲解 NVSHMEM 的 PE、对称内存、单边操作和完成模型,避免 API 名称堆砌,并用环形移位示例辅助理解。
- 程序结构指导:教授稳定的 C/C++ 程序结构,包括初始化(nvshmem_init 或 nvshmemx_init_attr)、查询节点本地 PE ID、选择 CUDA 设备、集体分配对称内存、选择操作族(put/get、atomics、信号与等待、团队集合操作)、选择调用上下文(主机 API、设备 API、流上 API)、使用对称地址和目的 PE 标识远程数据、添加排序和完成(nvshmem_fence、nvshmem_quiet)、集体释放和最终化。
- NVSHMEM4Py 程序指导:将相同模型映射到 Python 生命周期,包括选择并设置本地 CUDA 设备、初始化 NVSHMEM4Py、集体创建对称数组、执行通信与同步、集体释放对称数组、最终化。
- 编译与链接指导:提供 nvcc 命令形状,要求启用可重定位设备代码、包含 NVSHMEM 头文件、链接主机和设备库;对于 CMake,建议使用 NVSHMEM 安装的配置文件并以 config 模式使用 find_package。
- 启动指导:提供 mpirun、srun、nvshmrun 的命令形状,建议从单节点两个 PE 开始,默认每个 GPU 一个 PE,并验证小规模运行后再扩展。
使用方式: 用户通过显式提示说明学习目标或所处阶段,技能根据目标选择路径。如果阶段明确,直接处理;否则询问用户想做什么,并一次性呈现所有选项:判断 NVSHMEM 是否适合、学习心智模型、安装 NVSHMEM、运行预编译示例、编译或链接 C/C++ 应用、编写 NVSHMEM C/C++ 或 NVSHMEM4Py 程序、推荐下一步。技能默认只解释工作流程并打印命令供用户运行,不会编译、启动程序、提交调度作业、分配资源或修改环境,除非用户明确要求执行。对于安装、版本特定细节、Python API 名称、精确包路径、启动器配置、传输设置等,技能会调用 $nvshmem-docs 获取版本文档;对于编译或运行失败,会调用 $nvshmem-troubleshoot-and-report-bugs 并收集完整命令和每个 PE 的输出。
限制: 该技能提供入门指导,不覆盖详尽的 API、安装、启动器、传输或性能细节。命令块被视为可调整的形状,不声称与已安装版本、包布局、集群策略或目标架构匹配,除非有版本特定文档和目标检查。架构适用性评估基于所述通信模式,不承诺加速,除非在目标拓扑上有代表性测量。执行默认不在范围内,解释、入门或帮助运行程序的请求不授权环境变更或工作负载执行。Python API 细节、安装和版本兼容性转交 $nvshmem-docs,不自行推断。如果专门技能不可用,遵循文档中的回退方案,不虚构当前细节。