首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么Rust中的对数比Java慢?

为什么Rust中的对数比Java慢?
EN

Stack Overflow用户
提问于 2017-07-11 22:33:03
回答 2查看 3K关注 0票数 19

如果我在Rust中运行这些基准测试:

#[bench]
fn bench_rnd(b: &mut Bencher) {
    let mut rng = rand::weak_rng();
    b.iter(|| rng.gen_range::<f64>(2.0, 100.0));
}

#[bench]
fn bench_ln(b: &mut Bencher) {
    let mut rng = rand::weak_rng();
    b.iter(|| rng.gen_range::<f64>(2.0, 100.0).ln());
}

结果是:

test tests::bench_ln             ... bench:        121 ns/iter (+/- 2)
test tests::bench_rnd            ... bench:          6 ns/iter (+/- 0)

121-6 =每个ln调用115 ns。

但Java中的基准测试是相同的:

@State(Scope.Benchmark)
public static class Rnd {
    final double x = ThreadLocalRandom.current().nextDouble(2, 100);
}

@Benchmark
public double testLog(Rnd rnd) {
    return Math.log(rnd.x);
}

给了我:

Benchmark    Mode Cnt  Score  Error Units
Main.testLog avgt  20 31,555 ± 0,234 ns/op

Rust的日志速度比Java慢大约3.7倍(115/31)。

当我测试斜边实现(hypot)时,Rust中的实现比Java快15.8倍。

我是否写了糟糕的基准测试,或者是性能问题?

对评论中的问题的回应:

  1. ",“在我的国家是一个小数点分隔符。
  2. 我使用cargo bench运行Rust的基准测试,它总是在发布模式下运行。
  3. Java基准测试框架(JMH)为每个调用创建一个新对象,即使它是一个static类和一个final变量。如果我在测试的方法中添加一个随机创建,我会得到43 ns/op。
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45037547

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档