开发者社区> 问答> 正文

在具有240个或更多元素的数组上循环时,为什么会对性能产生较大影响?

当在Rust中的一个数组上运行求和循环时,我发现CAPACITY> = 240 时性能会大幅下降。CAPACITY= 239的速度大约是80倍。

Rust对“短”数组进行了特殊的编译优化吗?

与编译rustc -C opt-level=3。

use std::time::Instant;

const CAPACITY: usize = 240; const IN_LOOPS: usize = 500000;

fn main() { let mut arr = [0; CAPACITY]; for i in 0..CAPACITY { arr[i] = i; } let mut sum = 0; let now = Instant::now(); for _ in 0..IN_LOOPS { let mut s = 0; for i in 0..arr.len() { s += arr[i]; } sum += s; } println!("sum:{} time:{:?}", sum, now.elapsed()); }

展开
收起
保持可爱mmm 2020-01-16 16:08:25 397 0
1 条回答
写回答
取消 提交回答
  • 如果您想使用迭代器,请尝试以下操作:

    const CAPACITY: usize = 240; const IN_LOOPS: usize = 500000;

    pub fn bar() -> usize { (0..CAPACITY).sum:: () * IN_LOOPS } 感谢@Chris Morgan提供有关范围模式的建议。

    该优化的装配是相当不错的:

    example::bar: movabs rax, 14340000000 ret 问题来源于stack overflow

    2020-01-16 16:08:43
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
数据带来无限可能 立即下载
用计算和数据去改变整个世界 立即下载
重新定义计算的边界 立即下载