在我正在分析的应用程序中,我发现在某些情况下,此功能可以占用总执行时间的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/

10-12 04:33