在我正在分析的应用程序中,我发现在某些情况下,此功能可以占用总执行时间的10%以上。
正在使用MSVC++ 2008编译器,以供引用...我不记得是否modf映射到一条指令,或者是否有任何方法可以使其更快。
有关sqrt函数的类似问题,另请参见here
与sqrt不同,我真的不知道modf是如何工作的。有组装作业吗?例如,您可以执行以下操作:
modf(float input,int &intPart, float &floatPart)
{
intPart= (int)input;
floatPart= input - intPart;
}
但是我认为这会因强制转换/转换等而受到惩罚。快速实现如何工作?
最佳答案
您在这里得到了很好的答案,但是其他90%的时间又去了哪里呢?
不要在每个例程中查看独占的%时间。
查看每行代码的百分比时间,如果可能的话,让它包括阻塞时间,而不仅仅是CPU时间。
这样,您很可能会发现一部分时间,甚至不需要使用modf函数或其他函数。
获得该信息的一种简单方法是this technique。
补充:当您发现可以做的优化时,预计总执行时间会减少,但不要期望百分比一定会下降。例如,如果您删除了其他内容,则您在modf和/或sqrt中的%时间实际上可能会增加,或者,如果您发现自己可以记住它们(因此少称它们),则它们可能会减少。
在这种优化方法中,您可以将程序的执行历史视为一个大调用树,而您正在寻找的是可以修剪的整个分支。更重要的是,由于一行代码可以出现在调用树的多个分支中,因此将其全部修剪一次即可对其进行修剪。
关于c++ - 是否有可能推出明显更快的modf版本,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2637714/