如何在汇编级别分析C++函数?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (30)

我有一个功能是我的程序的瓶颈。它不需要访问内存,只需要计算。这是内部循环,并多次调用,所以这个函数的任何小增益都是我的程序的重大胜利。

我来自PS3优化SPU代码的背景,您可以在其中获取SPU程序,然后通过管道分析器运行它,您可以将每个汇编语句放在自己的列中,并尽量减少功能所需的周期数。然后重叠循环,以便最大限度地减少管道依赖关系。通过该程序和每个汇编指令所需的所有循环的列表,我可以优化得更好,然后编译器可以做到。

在不同的平台上,它有我可以注册的事件(缓存未命中,周期等),我可以运行该功能并跟踪CPU事件。这也相当不错。

现在我正在使用Visual Studio C ++ 2010(带有Core i7 Intel处理器)在Windows上开展业余爱好项目。我没有钱支付VTune的大笔费用。

我的问题:

如何在Windows上的英特尔处理器的汇编级别上分析函数?

我想编译,查看反汇编,获取性能指标,调整我的代码并重复。

提问于
用户回答回答于

有一些很棒的免费工具,主要是AMD的CodeAnalyst。

然而,较少知道的工具是英特尔架构代码分析器(它与CodeAnalyst一样免费),它类似于你描述的spu工具,因为它详细描述了延迟,吞吐量和端口压力(基本上请求分派给ALU的MMU和类似)为你的程序集合逐行。

英特尔还有一些与IACA相同的工具,它们的实验/假设代码网站的性能调整部分下的avaibale ,例如PTU,它是(或者是)VTune的实验性演变,从我可以看,它的免费。

在深入研究之前阅读英特尔优化手册也是一个不错的主意。

用户回答回答于

你可能想要尝试valgrind中包含的一些实用程序,如callgrind或cachegrind。

扫码关注云+社区