NVIDIA GPU-Initiated Data Storage(GIDS)详解:让 GPU Kernel 主动访问存储
GPUDirect Storage(GDS)已经能够让存储数据绕过 CPU 内存,直接进入 GPU 显存。但经典 GDS 仍有一个重要特征:I/O 请求由 CPU 侧应用代码提交。 当 GPU kernel 在执行过程中才知道下一份数据位于哪里时,控制权必须在 GPU 与 CPU 之间往返。对于图计算、向量检索、稀疏模型和超大规模数据分析,这种细粒度同步可能比数据传输本身更昂贵。 NVIDIA GPU-Initiated Data Storage,简称 GIDS,试图进一步消除这层控制瓶颈:让 GPU kernel 直接发起存储 I/O,使 GPU 不仅是数据的接收者,也是 I/O 请求的生产者。 本文介绍 GIDS 的动机、架构、工作流程、适用场景,以及它和 GDS 的本质区别。 一、为什么有了 GDS 还需要 GIDS GDS 优化了数据路径: CPU 发起请求 │ ▼ 存储 ─────────────► GPU 显存 数据不经过 CPU 内存 这已经消除了大量主机内存中转,但控制路径仍然经过 CPU。经典流程可能是: GPU 执行 kernel; GPU 产生下一批要访问的数据索引; kernel 结束或与 CPU 同步; CPU 读取结果并构造文件 I/O; CPU 调用 cuFile; 数据进入 GPU; CPU 再次启动 kernel。 如果每次请求都是大块、批量且可提前预测,这种方式通常没有问题。但如果 GPU 在计算过程中产生数以万计甚至更多的动态访问,频繁的 GPU—CPU 往返会带来: ...