自动的方式来获得一些代码段的浮点运算次数(Automatic way to obtain the f

2019-09-29 14:09发布

我有一些相当复杂和高度模板代码(C ++,但是这可能不是非常相关的),其中我想知道补充说,潜艇,MULS,申报单,并在执行sqrts的数量。 是否有自动的方式来获得该信息(编译器可以工作了易)? 我试图计算它自己所产生的汇编代码,但是糊涂了jpjmpcall秒。

Answer 1:

我建议重写+- */运营商和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>();


Answer 2:

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

尝试在二元改变你的“添加”,“子”,“MUL”,“格”,“开方”,以一些无效的操作码。 不要忘记定义操作码无效错误处理程序来恢复码。 当程序运行时,CPU会触发那些改变“添加”,“子”,“MUL”,“格”,“开方”无效的操作码错误。 通过计算时代被触发无效的操作码错误,你可以得到你想要什么。



文章来源: Automatic way to obtain the floating-point operation count for some piece of code