首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >内存受限情况下GEMM的有效算法

内存受限情况下GEMM的有效算法
EN

Stack Overflow用户
提问于 2022-03-01 18:35:19
回答 1查看 204关注 0票数 0

我正在寻找一个高效的算法来执行(密集的)大型矩阵乘法在GPU上。更具体地说,对于GPU没有足够内存容纳所有矩阵的情况(例如,m=n=k=100,000)。我使用cuBLAS在块中执行矩阵乘法,我可以想到许多基于块的方法,但是它们效率很低,因为A、B或C矩阵必须多次复制到或从GPU复制。

我知道已经提出了许多有效的算法(例如,这里),但我无法找到所使用的算法的具体定义。是否有算法可以在没有冗余副本的情况下执行此任务(即,复制A、B和C精确一次)?对竞争方式有什么指点吗?

EN

回答 1

Stack Overflow用户

发布于 2022-03-01 20:13:37

这种算法称为核外算法,通常通过使用tiles来解决这个问题。其想法是首先将AB分割成比较大的块。然后,在GPU上发送2块,执行两块的乘法,将结果写入预先分配的块(始终相同),将其发送回CPU,并将结果累加到C矩阵的一个块中。实际上,该算法与用于求解矩阵乘法的算法相同,只是条目是块,您需要关心从GPU到GPU发送/接收数据。CUDA流可以通过与计算重叠的通信来改进执行时间。注意,由于GPU上没有足够的内存,所以需要多次复制tiles。Lebesgue曲线 (也称Z-贴图或Z-阶曲线)可以用来减少拷贝/通信的数量.做这一切有点复杂。一些运行时系统和工具可以帮助您更容易地隐藏内存传输(例如。StarPu是一个研究项目)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71313130

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档