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