AMD Ryzen平台64位内存非原子增量性能异常的技术问询
非原子内存增量操作的位宽性能异常疑问
在AMD Ryzen处理器上测试非原子与原子内存增量指令的性能时,观察到以下现象:
- 非原子操作中,8位、16位、32位内存增量的耗时接近,但64位内存增量的速度是前三者的8倍;
- 带
lock前缀的原子内存增量操作在所有位宽下耗时一致,符合预期。
测试结果
R[0]= 4015626 R[1]= 8891591 ratio:2.21425 // 8 bits R[2]= 4014659 R[3]= 8885804 ratio:2.21334 // 16 bits R[4]= 4015744 R[5]= 8869814 ratio:2.20876 // 32 bits R[6]= 541994 R[7]= 8865181 ratio:16.3566 // 64 bits
对应汇编代码
64位非原子内存增量汇编:
3550: 48 8b 44 24 08 mov 0x8(%rsp),%rax 3555: 48 83 c0 01 add $0x1,%rax 3559: 48 89 44 24 08 mov %rax,0x8(%rsp)
8位非原子内存增量汇编:
5470: 0f b6 44 24 0f movzbl 0xf(%rsp),%eax 5475: 83 c0 01 add $0x1,%eax 5478: 88 44 24 0f mov %al,0xf(%rsp)
不同处理器上该现象存在差异,目前无法理解为何64位非原子内存增量操作会比窄位宽版本快这么多,希望得到技术层面的解释。
内容的提问来源于stack exchange,提问作者George Kourtis
相关产品推荐
相关产品推荐

