程序中有个变量需频繁除法和取模计算。该变量虽然是运行时动态获取的,但值可确定 u32 足以容纳。如果定义成 u64 ,是否会影响计算性能?
目标系统是 intel 或 arm ,但都是 64 位系统。
1
tool2d 2023-05-16 18:02:29 +08:00
随手写个 benchmark ,自己测试一下呗。
我以前认为乘除要比加减计算费时,但用 SSE 优化指令测试了一下,好像也没拉开明显差距。 现在 CPU 比以前好多了,计算只要能并行,速度就够快。 |
2
pkoukk 2023-05-16 18:02:33 +08:00
跑个 benckmark 呗,我用 golang 测试,u32 大概比 int64 慢不到 2%
|
4
misdake 2023-05-16 18:37:19 +08:00 via Android 1
x86 微架构层面的性能差别:
https://uops.info/html-instr/IDIV_R64.html https://uops.info/html-instr/IDIV_R32.html 对于有硬件 idiv 支持的的微架构,延迟和吞吐看起来不受输入数据影响。 感觉区别不算很大吧。 至于能否隐藏延迟还是要看你具体的 workload 情况,自己测测。 |
5
opengps 2023-05-16 18:40:26 +08:00
虽然可能有关系,但这得多大的量才能把这个优势体现出来呢?
|
6
rrfeng 2023-05-16 18:55:13 +08:00
64 位架构上不是 64 位更快么?
|
8
secondwtq 2023-05-16 19:17:21 +08:00
@secondwtq 贴错了,倒数第二个 URL 是这个: https://www.v2ex.com/t/845257
|