数学:并行计算:単一gpuコードをマルチgpu環境で実行するための多次元データ分割手法の検討
単一GPUコードをマルチGPU環境で実行するための多次元データ分割手法の検討
AI总结
目的
本文提出并探讨了一种多维数据分割手法,目的是将原本为单一GPU编写的CUDA代码,自动扩展到多GPU环境下加速执行。主要解决问题是:如何高效分割大规模多维数据,使其能分配到多个GPU上处理,从而突破单GPU显存的容量限制,且尽可能降低数据传输量与开发负担。
手法
基于采样执行的访问范围分析
方法扩展自1维数据分割的既有做法,通过“采样运行”部分GPU线程来自动推定各线程实际访问的多维数据范围。相比原有的1维方法(只能用一段线性内存区域来描述分块),本方法能更精确地针对多维数组,在每一维上分别确定访问上/下界,从而有效减少不必要的冗余数据传输和存储。
多维分割与索引转换
采样阶段推定出每个维度上的访问区间,按照这些区间对多维数据进行小块分割(segment)。
分割前后的数据索引体系不同,需要在内核执行前后自动进行索引变换,保证每个分块内的线程能正确访问属于自己的数据子集。
针对实际GPU代码,论文推导了将原始索引(1维线性地址)映射到分割后多维分块内坐标的公式。
-
结果
实验设置
测试平台:Intel Xeon E5-2680v2, 512GB内存, 2块NVIDIA Tesla K40(各12GB显存)
测试应用:CUDA矩阵乘法代码,分别应用未分割、1维分割(既有方法)、2维分割(本文方法)
可处理最大规模
原始代码(无分割):最大可处理约$N=31,584$的矩阵(共11GB内存)。
1维分割方法:最大可处理$N=38,496$的矩阵(17GB)。
本文方法(2维分割):可处理高达$N=207,680$(482GB),远超单GPU显存和既有方法。
-
-
其他内容与亮点
前提假设:方法要求GPU内核中数组访问为线程/线程块ID的线性组合(可归约为一次函数)。
与相关工作的关系:与Qilin、RSVM、OpenMPC、VAST等已有自动数据分割/大数据流水线系统对比,本文方法更适用于直接优化已写好的单GPU CUDA代码,且分割粒度更细。
未来工作:计划自动化代码转换过程(当前实验还需手工修改索引部分)。
结论:本手法适用于超大规模数据、需要跨GPU处理而单GPU显存无法容纳的科学计算场景。即便在牺牲部分效率下,也能显著扩大可处理问题的规模。
/var/www/DokuWikiStick/dokuwiki/data/pages/数学/并行计算/単一gpuコードをマルチgpu環境で実行するための多次元データ分割手法の検討.txt · Last modified: 2025/07/20 08:11 by zhonghui