败犬日报 2026-03-15
败犬日报 2026-03-15
1. 群友写 gpu 的 sgemm 有感
之前太习惯乱序执行,寄存器重命名之类的优化手段了,以至于完全没意识到 gpu 上没这些东西。cpu 上写我就把流水大概排一排就行,到时候乱序一下性能没差别;gpu 上就必须精细,cpu 上我想办法解真依赖就行,但是 gpu 上我还要解假依赖……
感觉这些问题如果是初步接触 gpu 编程的人反而不容易忽略,但是我在 cpu 上写多了,下意识就认为这种地方不影响性能。
比如说你在 cpu 上处理一个序列,每次循环先读,再算,最后写回,读->算中间有延迟对吧,但是靠乱序其实就无所谓,反正下一圈循环的读可以提前执行,延迟自动就没了。所以我根本没在意过这个延迟。gpu 上就不一样,没有乱序,所以要么显式填充无关的运算指令要么多开线程靠调度掩盖延迟,反正得显式处理。
再比如 cpu 上遇到假依赖我都下意识忽略的,反正它自己会寄存器重命名,但是 gpu 就不行,真假依赖都要处理。