威士忌湖 i7-8565U
RESOURCE_STALLS.OTHER
看起来并没有被英特尔文档很好地解释:
计算因其他资源问题而执行受阻的周期数。
我对一个内存复制示例进行了实验,其中包含 6400
次迭代的循环,每次迭代复制 16MiB
的随机生成数据。
基准测试:
avx_memcpy_baseline:
shr rdx, 0x3
xor rcx, rcx
avx_memcpy_baseline_loop:
add rcx, 0x08
cmp rdx, rcx
ja avx_memcpy_baseline_loop
ret
基线计数器:
823 292 269 resource_stalls.any
181 045 r02a2 #LOAD
831 370 403 r04a2 #RS_FULL
49 659 resource_stalls.sb
130 100 r10a2 #ROB_FULL
63 386 r20a2 #FPCW
2 151 516 r40a2 #MSCXR
4 222 r80a2 #OTHER
WB商店:
avx_memcpy_forward_llss:
shr rdx, 0x3
xor rcx, rcx
avx_memcpy_forward_loop_llss:
vmovdqa ymm0, [rsi + 8*rcx]
vmovdqa ymm1, [rsi + 8*rcx + 0x20]
vmovdqa [rdi + rcx*8], ymm0
vmovdqa [rdi + rcx*8 + 0x20], ymm1
add rcx, 0x08
cmp rdx, rcx
ja avx_memcpy_forward_loop_llss
ret
WB商店柜台:
27 089 245 473 resource_stalls.any
4 873 836 r02a2 #LOAD
14 099 696 r04a2 #RS_FULL
24 130 341 296 resource_stalls.sb
5 790 969 r10a2 #ROB_FULL
375 032 r20a2 #FPCW
3 395 592 r40a2 #MXCSR
4 899 892 032 r80a2 #resource_stalls.other 14% of RESOURCE_STALL.ANY
NT商店:
avx_nt_memcpy_forward_llss:
shr rdx, 0x3
xor rcx, rcx
avx_nt_memcpy_forward_loop_llss:
vmovdqa ymm0, [rsi + 8*rcx]
vmovdqa ymm1, [rsi + 8*rcx + 0x20]
vmovntdq [rdi + rcx*8], ymm0
vmovntdq [rdi + rcx*8 + 0x20], ymm1
add rcx, 0x08
cmp rdx, rcx
ja avx_nt_memcpy_forward_loop_llss
ret
NT商店柜台:
18 121 917 993 resource_stalls.any
2 211 195 r02a2 #LOAD
5 588 784 r04a2 #RS_FULL
12 061 475 989 resource_stalls.sb
3 156 129 r10a2 #ROB_FULL
165 967 r20a2 #FPCW
2 152 595 r40a2 #MXCSR
6 730 668 837 r80a2 #resource_stalls.other 33% of RESOURCE_STALLS.ANY
对于非时间存储,如果发生了资源停顿,则很容易被注意到。因此,我很想知道在Skylake或更新的版本上分析内存限制例程时,RESOURCE_STALLS.OTHER
可能意味着什么。
perf
没有为更多不同的特定“资源停顿”命名事件。我已经有一段时间没有使用ocperf.py
了,也许它知道这些。 - Peter Cordes