cpu – RAM是否需要同时提取16位或128位?

具有SSE和AVX / 2的现代x86 CPU具有大量寄存器

如果我决定使用一些最大的寄存器(> 128bit),我的程序会慢下来吗?为什么?

我找不到一个独特的解决方案.如果我理解正确,根据型号,CPU每次都会提取一定量的RAM(64,128bit),但前提是你使用了你要求的位.这样对吗?

如果可能,请将您的解释应用于此示例:

mov al, 0xFF ;8bit ns=??
mov ax, 0xFFFF ;16bit ns=??
mov eax, 0xAABBAABB ; 32bit ns=??
mov rax, 0xAABBCCDDAABBCCDD
mov xmm0, ...
mov zmm0, variable512bit
; and the opposite
mov variable512bit, zmm0

最佳答案 从L1高速缓存填充寄存器所需的时间取决于处理器-L1高速缓存接口.处理器-L1接口的宽度通常等于或小于高速缓存行.在Nehalem中,即使高速缓存行大小为64字节宽,也可以在一个周期内加载16个字节.对于不同的架构,请查看
here的某些数字.

假设L1命中回答你的问题:只要寄存器大小等于或小于处理器-L1接口,它就不会减慢你的代码速度.请记住,如果您的访问权限未对齐,则需要进行两次访问才能获取数据并降低代码速度.

在高速缓存未命中的情况下,存储器接口决定了代码性能.请注意,内存带宽远低于缓存带宽.

SIMD寄存器(如AVX和SSE)可能比处理器-L1接口宽.

点赞