第108章 降维解构(5 / 7)
这个问题,即使是在他们这个专门搞系统底层的课题组里,也鲜少有人在写代码前正经八百地提出来討论过。
所有人在面对优化这个词时,都默认了单一维度的快。
然后下意识去死抠比较器的绝对数量,去计较少写了一条汇编指令。
然而,在拥有多个alu 埠、复杂分支预测和重排序缓衝区的现代处理器上,最少的指令条数,並不意味著最高的吞吐量。
“我们要跑在批处理的场景里,看重的是极限吞吐。”陈启明没有任何犹豫,直接给出了定调。
“那就好办了。”
江临点了点头,將代价评估后端的配置文件打开,掛上了陈启明之前提供的机器a的硬体埠爭用模型数据。
“我把搜索目標明確设定为最大化吞吐量,然后,在这个特定模型下跑一个受限空间內的定向搜索。”
江临並没有启动全量搜索。
全量搜索整个指令状態空间,在没有算力集群支撑的情况下,是一个需要在算力废土里用几十年的时间去慢慢熬的浩大工程。
他仅仅是在一个被严密数学剪枝后的极窄范围內,让这套三层架构运转了不到五分钟。
工作站的散热风扇发出一阵短暂而急促的轰鸣后,屏幕上吐出了一排排新鲜出炉的候选结果。
“陈老师,您看一下。”
江临调出內置的对比工具,將两段代码並排展示。
“这里头排在第一梯队的,有一个排序网络,它的拓扑结构跟您团队耗费数月手工调优出来的那一版,几乎完全吻合。这个结果首先印证了一点,您团队在底层优化的手艺没有任何毛病。在人类能够凭藉直觉和经验触及的边界內,你们確实已经摸到了比较器数量最优的那一档基准线。”
听到这番话,陈启明紧绷的脸色终於舒缓了许多。
“但是,请看这一个。”江临的滑鼠向下滑动,点开了另一个评分稍高的候选方案,“这套方案的比较器数量同样是九个,一个都不比你们的多,也没有减少。可是它將这九个比较器的指令排布顺序,进行了一种看似反直觉的错位编排。这种错位,恰好避开了机器a在特定周期內的alu埠资源拥堵。”
“在机器a上,並且仅仅是在机器a的微架构下,它的极限吞吐量,比你们手工调优的那一版,快了不到百分之三。”
百分之三。
在日常应用的软体开发中,这是一个小到几乎不值一提,很容易就会被环境噪声轻易淹没的数字。
然而裴礪一言不发,在一旁的副屏上调出自己的终端环境,將江临搜索出的那段甚至没有加任何注释的候选代码拷贝了进去。
他亲自动手掛上编译器,开启最高级別的优化选项,连接上linux內置的perf性能分析工具,屏息凝神地连跑了三遍基准测试。
然后锁cpu affinity,关掉睿频波动,把governor固定到performance,预热缓存,perf stat-r50连跑五十组。
他盯著cycles、instructions、uops issued、branch-misses几列数字看了很久。
三十组之后,趋势还在。
五十组之后,置信区间没有压回原版。
那不到百分之三的差距,终於从噪声里站了出来。
“五分钟?”裴礪指著桌上的设备,声音有些发涩,“这就只是在普通的机器上跑了五分钟的结果?”
“嗯,五分钟不到,因为设定了严苛的剪枝条件。”江临平静地回答。
陈启明长长地嘆息了一声:“一个仅仅跑了五分钟的自动化受限搜索,就凭藉著针对性的硬体模型,在一个被我们翻来覆去研究过的用例上,硬生生地压过了我们整个团队手工雕琢了大半年的版本。” ↑返回顶部↑
所有人在面对优化这个词时,都默认了单一维度的快。
然后下意识去死抠比较器的绝对数量,去计较少写了一条汇编指令。
然而,在拥有多个alu 埠、复杂分支预测和重排序缓衝区的现代处理器上,最少的指令条数,並不意味著最高的吞吐量。
“我们要跑在批处理的场景里,看重的是极限吞吐。”陈启明没有任何犹豫,直接给出了定调。
“那就好办了。”
江临点了点头,將代价评估后端的配置文件打开,掛上了陈启明之前提供的机器a的硬体埠爭用模型数据。
“我把搜索目標明確设定为最大化吞吐量,然后,在这个特定模型下跑一个受限空间內的定向搜索。”
江临並没有启动全量搜索。
全量搜索整个指令状態空间,在没有算力集群支撑的情况下,是一个需要在算力废土里用几十年的时间去慢慢熬的浩大工程。
他仅仅是在一个被严密数学剪枝后的极窄范围內,让这套三层架构运转了不到五分钟。
工作站的散热风扇发出一阵短暂而急促的轰鸣后,屏幕上吐出了一排排新鲜出炉的候选结果。
“陈老师,您看一下。”
江临调出內置的对比工具,將两段代码並排展示。
“这里头排在第一梯队的,有一个排序网络,它的拓扑结构跟您团队耗费数月手工调优出来的那一版,几乎完全吻合。这个结果首先印证了一点,您团队在底层优化的手艺没有任何毛病。在人类能够凭藉直觉和经验触及的边界內,你们確实已经摸到了比较器数量最优的那一档基准线。”
听到这番话,陈启明紧绷的脸色终於舒缓了许多。
“但是,请看这一个。”江临的滑鼠向下滑动,点开了另一个评分稍高的候选方案,“这套方案的比较器数量同样是九个,一个都不比你们的多,也没有减少。可是它將这九个比较器的指令排布顺序,进行了一种看似反直觉的错位编排。这种错位,恰好避开了机器a在特定周期內的alu埠资源拥堵。”
“在机器a上,並且仅仅是在机器a的微架构下,它的极限吞吐量,比你们手工调优的那一版,快了不到百分之三。”
百分之三。
在日常应用的软体开发中,这是一个小到几乎不值一提,很容易就会被环境噪声轻易淹没的数字。
然而裴礪一言不发,在一旁的副屏上调出自己的终端环境,將江临搜索出的那段甚至没有加任何注释的候选代码拷贝了进去。
他亲自动手掛上编译器,开启最高级別的优化选项,连接上linux內置的perf性能分析工具,屏息凝神地连跑了三遍基准测试。
然后锁cpu affinity,关掉睿频波动,把governor固定到performance,预热缓存,perf stat-r50连跑五十组。
他盯著cycles、instructions、uops issued、branch-misses几列数字看了很久。
三十组之后,趋势还在。
五十组之后,置信区间没有压回原版。
那不到百分之三的差距,终於从噪声里站了出来。
“五分钟?”裴礪指著桌上的设备,声音有些发涩,“这就只是在普通的机器上跑了五分钟的结果?”
“嗯,五分钟不到,因为设定了严苛的剪枝条件。”江临平静地回答。
陈启明长长地嘆息了一声:“一个仅仅跑了五分钟的自动化受限搜索,就凭藉著针对性的硬体模型,在一个被我们翻来覆去研究过的用例上,硬生生地压过了我们整个团队手工雕琢了大半年的版本。” ↑返回顶部↑