首页 > 解决方案 > 如何找出在发布模式下对 Rust 代码应用了哪些优化?

问题描述

我为代码出现问题编写了这个函数:

pub fn best_window_variable(grid: &Vec<Vec<i32>>) -> (usize, usize, usize) {
    let mut best_power = i32::MIN;
    let mut best_window = (0usize, 0usize, 0usize);

    for y in 0..grid.len() {
        for x in 0..grid[y].len() {
            let space = std::cmp::min(grid.len() - y, grid[y].len() - x);
            let mut window_power = 0i32;
            for z in 1..=space {
                for dy in 0..z {
                    window_power += grid[y + dy][x + z - 1];
                }

                for dx in 0..(z - 1) {
                    window_power += grid[y + z - 1][x + dx];
                }

                if window_power > best_power {
                    best_power = window_power;
                    best_window = (x + 1, y + 1, z);
                }
            }
        }
    }

    best_window
}

优化(发布)构建比未优化(调试)构建快 50 倍。我想了解哪些优化提供了这种改进。

我正在学习 x86-64 程序集,并尝试使用cargo-asm读取两个版本的程序集输出以了解差异。

有没有更简单的方法来获得答案?

LLVM 是否记录应用了哪些优化?如果是这样,是否有可能衡量哪个对运行时影响最大?

使用像 Ghidra 这样的工具来分析编译的代码会更容易吗?

标签: optimizationrustllvm

解决方案


推荐阅读