gpt4 book ai didi

javascript - 为什么 Rust WASM 在计算素数时比 JavaScript 慢

转载 作者:行者123 更新时间:2023-12-05 00:26:12 25 4
gpt4 key购买 nike

关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。












这个问题似乎与 help center 中定义的范围内的编程无关。 .


13 天前关闭。


这篇文章在 13 天前被编辑并提交审核。





Improve this question




我编写了一段非常基本的代码来计算一个数字是否在 Rust(编译为 WASM)和 JavaScript 中为素数,以对算术性能进行基准测试。
我完全期待 Rust/WASM 能够击败 JavaScript。在我做过的所有其他算术基准测试中,Rust/WASM 似乎比 JavaScript 更有优势,或者至少与之匹配。然而在这个测试中,JavaScript 似乎大大优于 WASM,我并没有真正解释为什么会这样。
rust 代码:

pub fn calculate_is_prime(number: u64) -> bool {
if number == 1 {
return false;
}
if number == 2 {
return true;
}
for i in 2..number {
if number % i == 0 {
return false;
}
}
return true;
}

#[wasm_bindgen]
pub fn bench_rs(max: u64) -> u64 {
(1..=max).map(|n| calculate_is_prime_rs(n) as u64).sum()
}
JavaScript 代码:

function calculateIsPrime(number) {
if (number === 1) {
return false;
}
if (number === 2) {
return true;
}
for (let i = 2; i < number; i++) {
if (number % i === 0) {
return false;
}
}
return true;
}

function bench_js(max) {
let tot = 0;
for (let n = 1; n <= max; n++) {
tot += calculateIsPrime(n);
}
return tot;
}

let max = 200000;
console.log(`Amount of primes under ${max} is ${bench_js(max)}`);

基本示例项目: https://github.com/Mcluky/Stack-Overflow-Rust-Wasm-Performance-Example
我已经检查/完成的事情:
  • 我确保始终设置 --release在构建 rust 代码时标记。
  • 直接在我的机器上运行 Rust 代码,这比 JS 和 WASM 快得多,所以我怀疑它与 WASM 目标有关。
  • 由于 JavaScript 使用浮点数,因此在 Rust 中用浮点数 (f64) 替换了整数类型 (u64),但我得到了类似的结果。
  • 经过迭代测试以确保它是一致的。
  • 试过while而不是 for-in在 Rust 版本中,以防它没有你想象的那么优化。
  • 最佳答案

    我无法在 Windows 10 上的 Ryzen Threadripper 2950x 上重现您的结果。我添加了以下功能:

    #[wasm_bindgen]
    pub fn bench_rs(max: u64) -> u64 {
    (1..=max).map(|n| calculate_is_prime_rs(n) as u64).sum()
    }
    function bench_js(max) {
    let tot = 0;
    for (let n = 1; n <= max; n++) {
    tot += calculateIsPrime(n);
    }
    return tot;
    }
    然后我用 wasm-pack build --release --target web 编译并在 Google Chrome 中进行了评估:
    > console.time("rs"); console.log(bench_rs(BigInt(200000))); console.timeEnd("rs");
    17984n
    rs: 6015.033935546875 ms

    > console.time("js"); console.log(bench_js(200000)); console.timeEnd("js");
    17984
    js: 6017.426025390625 ms
    在 Firefox 中:
    > console.time("rs"); console.log(bench_rs(BigInt(200000))); console.timeEnd("rs");
    17984n
    rs: 6076ms - timer ended

    > console.time("js"); console.log(bench_js(200000)); console.timeEnd("js");
    17984
    js: 6074ms - timer ended

    关于javascript - 为什么 Rust WASM 在计算素数时比 JavaScript 慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73120690/

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