返回

第二百八十八章 你不知道NullPointer是谁?

首页
关灯
护眼
字:
大
中
小
上一章 回目录 下一页 进书架
    第二百八十八章 你不知道NullPointer是谁? (第1/2页)

    范小天把这不算太长的代码从头看到尾,又从尾看到头。

    然後又从头看到尾。

    整整看了半个小时。

    说实话,他没看懂。

    没看懂不是因为代码写的烂,恰恰相反,是代码写的太优雅了。

    优雅的不像是适配层的代码。

    适配层的代码有个特点。

    它需要追求极致的性能,但这也是有代价的,有时候不得不牺牲可读性。

    这和做网际网路的程式设计师不一样,对他们来说,程序的运算效率并不是最重要的,可读性反而更重要。

    因为代码终究是写给人看的,一个组里那麽多工程师,今天你来写,明天我来写,如果你写的东西别人都看不懂,那就很容易出Bug。至於你写的这个程序是不是会快或者慢几十毫秒,相对来说不那麽重要。

    所以网际网路程序的代码往往不需要极致的优化,但是代码规范的要求却很严格。

    而硬体适配层的代码就不一样了。

    可读性当然也重要,但是硬体的使用效率往往追求极致,几毫秒的效率损耗会在高强度的运行下把成千上万倍的放大,所以里面经常会有各种奇技淫巧的骇客(hack)方法。

    所谓骇客方法,是编程里的黑话,指的是那种不太规范,但是好用的方法。

    比如说在显卡里,正常应该运行时计算出显存和内核的比例,但是这个数又不会经常变化,运行时计算凭空加了损耗,所以骇客方法就是把这个比例写死在代码里。

    虽然这就导致这个代码放到别的硬体上完全没法用,因为比例是写死的,但是能够提高运行效率。

    但是刚刚提交的这段代码,里面没有范小天平时看到的各种难以理解的骇客方法。

    简单、简洁、优雅,没有任何注释,但是代码本身就能让你看明白它在干什麽。

    就是这种看得懂反而让范小天看不懂了。

    块内重计算的策略他认识,这是FlashAttention的核心思想之一,用重计算换显存,理论上可以把显存读写量降低到接近理论的最优值。

    但问题在於,把这个策略移植到L100上可不是一件容易的事。

    因为L100的共享内存布局和英伟达家的卡不一样,英伟达的实现没办法直接搬过来用,必须重新写一套专门适配L100内存架构的版本。

    这个版本要怎麽写?得靠真实的性能分析(Profiling)数据反覆校准。

    可是我们现在连性能分析工具(Profiler)都还没写出来呢。

    这就相当於在没有仪表盘、没有导航,甚至没有地图的道路上赛车,还要排水渠过弯,把每一个弯道都跑出理论极限来。

    这怎麽可能呢?藤原拓海来的也做不到吧。

    所谓外行看热闹,内行看门道。

    在英伟达干了这麽多年,范小天太清楚这个部分有多难写了。

    这可不是光懂内存管理的原理就够的,你还得对这块晶片的实际行为真的研究透了才行。因为晶片到了纳米级别,理论和现实之间的偏差只有跑真实数据才能量化。

    这每一样,单独拿出来,都是个大项目。

    说白了,这是个得要软硬体都有人懂,还得有人专门研究过L100的专家团队,坐在一起才能做出来的活儿。

    怎麽突然一份完整的代码就出现在代码库里了?

    这代码——不会没法用吧?

    抱着试一试的心态,范小天把刚才提交的这份代码从代码库里拉(pull)到本地,建了个测试环境,开始跑正确性验证。

    他盯着跑起来的进度条,一边打开外卖软体看了一下,一边漫不经心地等着第一个报错弹出来。

    呀,外卖已经送到了半天了,我的面要坨了。

    等一会报错了就先去把外卖拿回来。

    范小天这麽想着,抬起头来看向屏幕。

    他只看到了满屏绿色的PASS。

    这一套验证测试有几百个,一个一个跑过去,不算快,也不算慢。

    

    (本章未完,请点击下一页继续阅读)
上一章 回目录 下一页 存书签