如遇到章节错误,请关闭浏览器的阅读/畅读/小说模式并且关闭广告屏蔽过滤功能,稍后尝试刷新。
周的拉过一块空白的白板,“线性代数学过吧?”
“学过。”
周昀拿起白板笔,在板面上画了两个大方块,分別標上a和b。
“假设现在有两个巨大的矩阵a和b,我们要计算它们的乘积c,这是最基础的计算,但直接按教科书上的三重循环做,效率会非常低,尤其是在gpu这类並行处理器上,所以我们在gpu上做矩阵乘法的时候,需要把大矩阵拆成小块也就是一个个ties,让硬体並行计算,但tiles怎么切分,决定了计算速度和內存效率。
假如把它抽象成一个数学问题,假设a是mxk矩阵,b是kxn矩阵,c是mxn矩阵,我们要计算c=axb,就要选择一个tile用来分块计算,那么问题来了,我们该如何选择这个tile的大小?也就是这三个参数一一”他在白板上写下(t_m,t_n,t_k)。
“这本质上是一个优化问题,我们需要一个衡量標准,这里引入一个概念:算术强度。”
他在白板上写下公式:ai=(计算量flops)/(內存访问量bytes)。
“计算量很好理解,对於矩阵乘,每个tile的计算量大约是2xt_mxt_nxt_k次浮点运算。
內存访问量,粗略估计,我们需要將这三个小块读进来,所以大约是(t_mxt_k+t_kxt_n
+t mxtn)x sizeof(float)字节。
ai越高,意味著我们每从內存搬运一个字节的数据,能完成的计算就越多,我们就越接近处理器理论算力的上限,所以,我们的优化目標,简单说就是在硬体限制下,最大化这个ai。”
这个问题看上去没什么用,实际上意义巨大,如果有了一种最佳的切割方案,就能得到一张“调优表”或缓存,每一种矩阵大小都能对应一种tie配置。
这个表可以直接被编译器调用,生成最高效率的矩阵乘法內核。
这个內核通过一定的处理可以运行在不同的矩阵单元中,比如nvidia的tensorcore,amd的mfma,intei的xmx,这些矩阵单元单从硬体上看其实差距並不大,真正能让cuda一家独大的,是其对硬体的利用率,如果周昀能开发出一个高效的算子库,並且通过编译器运行在不同內核上,就能一定程度打破cuda的垄断,而矩阵运算的ti1e分割,就是他迈出的第一步,不过他自己最近的心思都放在教师智能体上,这方面打算先让陈默自己试试看,按他的估计,这个问题,陈默花点时间应该可以做的出来。
这个工作如果做出来,发一篇顶会没什么问题的。
写完这些,周昀放下笔,转过身看著陈默:“你的第一个课题,就是深入研究这个问题,怎么样?有信心吗?”
“这个.....”陈默看著黑板上的公式,“我试试!“
“大胆尝试就好,这是个很难的问题,你不必有压力,把它当作一个长期项目来尝试,我们实验室不会强制要求你发多少论文,只要你的工作是有意义的,我都看在眼里,遇到问题,先自己思考,如果卡壳了,隨时可以来问我,自己选个位置,然后到一楼104去找一下后勤的赵老师,让他帮你把门禁录一下,再把你的银行卡號学號发给我,以后你的劳务费就从这上面走。”
“好!那我收拾一下东西就搬过来?”
“这都隨你。”
实验室有了新人加入,周昀也按照承诺,让郑涛又採购了一台5090满配的电脑,外设,屏幕也全都配好。
陈默的动作也很快,下午的时候就收拾好东西搬了过来,他们大三课本来就不多,有大把的时间可以泡在实验室里。
本章未完,点击下一页继续阅读。