optimization - 如何找出在发布模式下对 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 这样的工具来分析编译的代码会更容易吗?
解决方案
推荐阅读
- ios - 我试图在加载屏幕时同时获得横向和纵向底部安全区域插图
- python - 具有多个 y 轴的 Qt 标注示例
- javascript - 根据所选按钮重定向到页面
- flutter - Flutter:不清楚 ValueChanged 和 FutureBuilder
- python - 使用 Python 将字符串“评估”为真实类型
- c++ - 将 uint32_t 与 uint64_t 连接和拆分的最佳方法
- javascript - 当输入成为焦点时,Jquery单击第一次不起作用
- apache-spark - 执行程序的 Prometheus 端点不包含预期的指标
- java - 尝试在 java 上创建新文件时的 filenotFound
- r - 用 plotly 创建一个稍微重叠的条形图