link:
http://software.intel.com/file/34646
intel在gdc2011上介绍cpu架构和优化的一个paper,还介绍了avx和vtune amplifier。
底层优化在游戏开发中还是富有生命力,因为我们的确需要它们来获得高于行业水准的执行效率。
这个也是加深对计算机理解的一个重要方式。
carmack说的好:底层编程对于程序员的灵魂有好处。
一句废话:刻意强调底层很重要很牛逼或者说现在这硬件底层没用都是有待商榷的,它有什么的影响力就需要相应的工作量,没什么特别之处。
4个方面可以好好注意一下现代cpu的架构:
- cache
- branch prediction
- out of order uOp scheduling
- wide range register(sse是128bit,到avx是256bit)
除了最后一个其实和我们上学时候学的体系结构没什么不同。
然后一个数据很好,fetch data的时间:
- register : 1cycle
- L1 cache : 4cycle
- L2 cache : 10 cycle
- L3 cache : 40--75cycle
- memory : 60--100ns
一些tips:
cache:
- 注意数据结构
- hardware prefetch
branch:
有一个branch prediction的部件
out of order:
降低dependency,可以让compiler产生出更具并行性的代码
scheduler模块有一些port,例子中是6个port,2个load,1个store,1个乘除法,1个加减法,一个shuffle,所以整个是围绕data dependent来进行的乱序执行。
在这种模式下,汇编指令的执行类似下面,一坨汇编分配到各个port之后,吞吐量很大:
wide range register部分和sse之前的思路一样的,根据不同情况选择structure of array或者array of structure。
latency:一个指令完成需要的时间
throughput:新指令可以issue的频率
所以可能一个指令(比如mul)完成需要很多cycle,但是在执行的过程中很多mul指令可以issue,最后的throughput还是很好的。
这个表很好:
Operation Latency Throughput
+ -* rsqrt,
rcp, hadd,
min,max 3-5 1
div, sqrt 14 14
sin,cos 160-200 130
move load/store >=1 .5
dot product 12 2
avx cloth的视频挺酷的。