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



我有一些相当复杂且高度模板化的代码(C++,但这可能不是很相关),我想知道执行时的添加,子,muls,div和sqrt的数量。有没有一种自动获取此信息的方法(编译器可以轻松解决)?我试图在生成的汇编代码中自己计算它,但与 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<Double>();

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

尝试将二进制文件中的"add","sub","mul","div","sqrt"更改为一些无效的操作码。不要忘记定义无效的操作码错误处理程序来恢复操作码。当您的程序运行时,CPU 将在那些更改的"添加"、"子"、"mul"、"div"、"sqrt"处触发无效操作码错误。通过计算触发无效操作码错误的次数,您可以准确地获得所需的内容。

相关内容

  • 没有找到相关文章

最新更新