gpt4 book ai didi

rust - 为什么在 Win8-64 上使用 Rust i32 比 i64 表现更好?

转载 作者:行者123 更新时间:2023-11-29 07:49:22 25 4
gpt4 key购买 nike

我最近开始研究 Rust。我认为对于应用程序,我更愿意只使用两种数字类型(通常是 i64 和 f64),因为我认为我的代码可能运行的任何东西都是 64 位的,而且我相信每行代码都很重要,因为简洁很重要,而且我不想不断地从例如转换数字。 i32/int 到 i64 等

在 Win8-64 上使用 Rust 0.8:(IE:rust 0.8 主机:i686-pc-mingw32)。

我写了一个小测试程序来查看性能差异。鉴于产生的时间安排,我想确定为什么存在差异。根据我看过的文献,Rust 将使用处理器使用的整数类型来寻址内存。据我所知,在 64 位处理器(Intel Core-i5)上,它是 64 位。然而,Rust 上的“int”似乎使用的是 32 位,而且 32 位似乎比 64 位快。虽然我认为性能差异(考虑到测试中的迭代次数)对于应用程序而言相对微不足道,但它仍然会引起问题,如前所述。 IE:32 位 int 是否用于 64 位处理器,为什么 32 位在 64 位机器上更快?

我的测试程序结果如下。指示的时间在许多重复中是一致的:

1000000000 iters (i64 iters and i64 simple addition) .....
Total Elapsed time = 3237.86 ms
Result from i64 addition = 2000000000

1000000000 iters (int iters and int simple addition) .....
Total Elapsed time = 2353.45 ms
Result from int addition = 2000000000

1000000000 iters (i32 iters and i32 simple addition) .....
Total Elapsed time = 2375.52 ms
Result from i32 addition = 2000000000

使用的代码如下:

fn fTesti64Add(mut iIterMax:i64) -> i64 {
println(fmt!("\n%s iters (i64 iters and i64 simple addition) .....",
iIterMax.to_str()));
let uTmeStart:u64 = extra::time::precise_time_ns();
let mut iTot:i64 = 0;
while iIterMax>0 {
iTot += 2;
iIterMax -=1;
}
fDisplayElapsed(uTmeStart, extra::time::precise_time_ns());
return iTot;
}

fn fTestIntAdd (mut iIterMax:int) -> int {
println(fmt!("\n%d iters (int iters and int simple addition) .....", iIterMax));
let uTmeStart:u64 = extra::time::precise_time_ns();
let mut iVal:int = 0;
while iIterMax > 0 {
iVal += 2;
iIterMax -= 1;
}
fDisplayElapsed(uTmeStart, extra::time::precise_time_ns());
return iVal;
}

fn fTestI32Add (mut iIterMax:i32) -> i32 {
println(fmt!("\n%s iters (i32 iters and i32 simple addition) .....",
iIterMax.to_str()));
let uTmeStart:u64 = extra::time::precise_time_ns();
let mut iVal:i32 = 0;
while iIterMax > 0 {
iVal += 2;
iIterMax -= 1;
}
fDisplayElapsed(uTmeStart, extra::time::precise_time_ns());
return iVal;
}

最佳答案

答案在:rust 0.8 host: i686-pc-mingw32

i686 是 32 位指令集(又名 x86),因此您在 64 位 CPU 上运行 32 位版本的 Rust。而 32 位软件无法使用 64 位整数数学运算。

所以你需要一个 64 位的 Rust。

关于rust - 为什么在 Win8-64 上使用 Rust i32 比 i64 表现更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19602253/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com