我已经分析了我的Rust代码,发现一个处理器密集型函数占用了很大一部分时间。由于我无法将该函数分解为更小的部分,所以我希望可以看到函数中的哪一行占用了哪一部分时间。目前我已经尝试了CLion的Rust分析器,但它没有该功能。
最好是在MacOS上运行该工具,因为我没有Windows/Linux机器(虚拟化除外)。
P. S. Visual Studio似乎有这个特性;但我使用的是Rust. https://learn.microsoft.com/en-us/visualstudio/profiling/how-to-collect-line-level-sampling-data?view=vs-2017它具有:
行级采样是探查器确定处理器密集型函数(如具有高独占样本的函数)代码中处理器必须花费大部分时间的位置的能力。
谢谢您的建议!
- EDIT**:使用C++,我确实看到了源代码行级别的信息。例如,下面的玩具显示,"for"循环占用了大函数中的大部分时间。但我使用的是Rust ...
2条答案
按热度按时间s8vozzvw1#
一旦编译完成,Rust的“行”就不存在了。优化器的工作是完全重新组织你写的代码,并找到最小的机器码,它的行为与你的意图相同。
函数通常是内联的,所以即使测量函数所花费的时间也可能给予不正确的结果--或者,如果您阻止程序内联,则会改变程序的性能特征。
ippsafx72#
要获得
perf annotate
或perf report
的源代码注解,你需要在你的cargo toml中使用debug=2
编译。如果你还想要标准库函数的源代码注解,你还需要将-Zbuild-std
传递给cargo(需要每夜一次)。