代码优化-之-优化浮点数取整

代码优化-之-优化浮点数取整

ID:34434907

大小:29.98 KB

页数:20页

时间:2019-03-06

代码优化-之-优化浮点数取整_第1页
代码优化-之-优化浮点数取整_第2页
代码优化-之-优化浮点数取整_第3页
代码优化-之-优化浮点数取整_第4页
代码优化-之-优化浮点数取整_第5页
资源描述:

《代码优化-之-优化浮点数取整》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、代码优化-之-优化浮点数取整                        HouSisong@GMail.com 2007.05.19tag: 浮点数转换为整数,fpu,sse,sse2,读缓冲区优化,代码优化,ftol,取整,f2l,ftoi,f2i,floattoint 摘要:本文首先给出一个浮点数取整的需求,并使用默认的取整方式,然后通过尝试各种方法来优化它的速度; 最终的浮点数取整实现速度甚至达到了初始代码的5倍(是vc6代码的18倍)!(注意:文章中的测试结果在不同的CPU和系统环境下可能有不同的结果,数据仅作参考)(2007.06.08

2、更新:补充SSE3新增的FPU取整指令fisttp的说明)(2007.06.04更新:一些修正、补充double取整、补充FPU的RC场说明)正文: 为了便于讨论,这里代码使用C++,涉及到汇编优化的时候假定为x86平台;使用的编译器为vc2005; 测试使用的CPU为AMD64x24200+,测试时使用的单线程执行; 为了代码的可读性,没有加入异常处理代码;A:需要优化的原始代码(使用了大量的浮点数到整数的转换)#include #include #include volatile long t

3、estResult; //使用一个全局域的volatile变量以避免编译器把需要测试的代码优化掉const long    testDataCount=10000000;const long    testCount=20;float         fSrc[testDataCount];#define asm __asmvoid ftol_test_0(){    long tmp=0;    for (long i = 0; i < testDataCount; ++i)         tmp +=(long)fSrc[i];  //需要优化

4、的浮点数取整    testResult=tmp;}int main(){    //inti    for (long i=0;i>1))*rand()*(1.0/RAND_MAX));    //test    double start0=(double)clock();        for (long c=0;c

5、();    start0=((double)clock()-start0)*(1.0/CLOCKS_PER_SEC);    //out    printf ("  Result = %ud   Seconds = %8.5f ",testResult,start0);    return 0;}//////////////////////////////////////////////////////////////////////////////////速度测试:         //==============================

6、================================================//ftol_test_0                       1.047秒 (VC6编译3.64秒):         //         (使用vc2005的SSE编译选项 “/arch:SSE”0.437秒)////////////////////////////////////////////////////////////////////////////////  一般编译器生成的浮点数转换为整数的指令序列都比预想的速度慢很多,它的性能

7、代价很容易被人忽略;在VC6编译器下上面的代码需要运行3.64秒,代码先修改FPU的取整模式(RC场),完成取整后在恢复RC场;VC2006生成的代码在CPU支持SSE的时候会调用使用cvttsd2si指令实现的版本,从而加快了取整的速度,达到了1.047秒,快了很多!让我们来尝试继续优化这个含有大量取整操作的函数ftol_test_0;B: 最容易想到的就是用浮点协处理器(FPU)(也可以称作x87)来优化取整将设置FPU取整方式和恢复FPU的取整方式的代码放到循环体外面从而加快了速度void ftol_test_fpu(){    unsigne

8、d short RC_Old;    unsigned short RC_Edit;    long isr

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。