The GPU programming model is primarily designed to support the development of applications that run on one GPU. However, just a single GPU is limited in its capabilities in terms of memory capacity and compute power. To handle large problems that exceed these capabilities, one must rewrite application code to manually transfer data between GPU memory and higher-level memory and/or distribute the work across multiple GPUs, possibly in multiple nodes. This means a large engineering effort is required to scale GPU applications beyond a single GPU. We present Lightning: a framework that follows the common GPU programming paradigm, but enables scaling to larger problems. Lightning enables multi-GPU execution of GPU kernels, even across multiple nodes, and seamlessly spills data to main memory and disk when required. Existing CUDA kernels can easily be adapted for use in Lightning, with data access annotations on these kernels allowing Lightning to infer their data requirements and dependencies. Lightning efficiently distributes the work/data across GPUs and maximizes efficiency by overlapping scheduling, data movement, and work when possible. We present the design and implementation of Lightning, as well as experimental results on up to 32 GPUs for eight benchmarks and an application from geospatial clustering. Evaluation shows excellent performance on problem sizes that far exceed the memory capacity of a single GPU.
翻译:GPU 编程模式主要是为了支持一个 GPU 上运行的应用开发。 但是, 只有一个 GPU 在存储能力和计算能力方面能力有限。 要处理超过这些能力的大问题, 就必须重写应用程序代码, 以便在 GPU 记忆和更高级记忆之间手工传输数据, 并/ 或者在多个 GPU 中分配工作, 可能的话在多个节点中进行。 这意味着需要做出巨大的工程努力, 将 GPU 应用程序扩大到一个 GPU 。 我们展示 Lightning: 一个遵循通用 GPU 编程模式的框架, 并且能够将工作扩大到更大的问题。 点亮能够让多GPU执行 GPU 内核, 甚至在多个节点之间执行, 必要时将数据无缝地溢出到主记忆和磁盘。 现有的 CUDA 内核可以很容易适应在 Lightning 中使用, 数据访问说明允许 Lighting 将 GPUI 的工作/ data, 通过重叠的时间安排、 数据移动和工作实现效率最大化。 我们展示了最优的G GM 的G 运行,, 将 设计和最优的G 的G, 运行 运行 的 的 运行 运行 运行 运行 的 运行 运行 的 运行 运行 运行 的 运行 的 运行 运行 运行 的 的 的 运行 运行 运行 运行 运行 运行 运行 运行 运行 运行 运行 运行 运行 运行 运行 。