自动获取某些代码的浮点运算计数的方法

我有一些相当复杂和高度模板化的代码(C ++,但这可能不是很相关),我想知道执行时的add,subs,muls,div和sqrts的数量。 是否有自动获取此信息的方法(编译器可以轻松解决)? 我试图在生成的汇编代码中自己计算,但是与jpjmpcall s混淆了。

我建议覆盖一些浮点数类型的+-*/运算符和sqrt函数,您可以在其中计算它们的使用。

像这样的东西:

 struct Double { double val; Double(double v): val(v) {} static unsigned add_count = 0; Double operator+(Double other) { ++add_count; return Double(val + other.val); } }; do_your_stuff(); 

是的,你可以,但方式有点复杂:

尝试将二进制文件中的“add”,“sub”,“mul”,“div”,“sqrt”更改为某些无效的操作码。 别忘了定义一个无效的操作码error handling程序来恢复操作码。 当您编程运行时,cpu将在更改“add”,“sub”,“mul”,“div”,“sqrt”的那些位置触发无效的操作码错误。 通过计算触发无效操作码错误的次数,您可以获得您想要的确切内容。