Intel C++ 编译器优化效果测试
信号量响应时间测试的基本步骤 (1)创建信号量 1和信号量 2。 (2)建
有相同优先级的线程 1和 2,并分别请求获得信号量 1和信号量 2。 (3)释放一个信
号量 1。 (4)线程 1获得信号量 1,得到当前运行次数后,立即释放信号量 2。
(5)线程 2获得信号量 2,得到当前运行次数后,立即释放信号量 1。 (6)重复第
4和第 5步,直到给出结束事件。 (7)得到 4至 6步所花费的全部时间和两线程分别
运行的次数。 (8) 计算 线程对信号量的响应时间。 转异常以及从异常恢复
时间的测试步骤 (1)创建运行一个线程。 (2)在线程中给出一个异常。
(3)异常处理中得出当前异常次数。 (4)重复第 2和第 3步,直到给出结束事件。
(5)得到 2至 4步所花费的全部时间和异常产生的总次数。 (6)计算转异常以
及从异常恢复的时间。 测试结果表 1 线程额外开销测试对比测试项目线程切换时间
高优先级抢占时间信号量响应时间转异常以及从异常恢复时间未使用 Intel C++编译器
(us)使用 Intel C++编译器 (us) 测试结论
从以上四项的测试结果可以看出,除了转异常以及从异常恢复在使用了 Intel C++编
译器后,执行效率有了较大提高(约能提高 1/3)外,其他几项在使用编译器前后几乎没
有什么变化。从这里可以看出使用 Intel C++编译器编译的代码对处理异常时的处理器能
有优化效果,执行效率能有较大的提高;对于线程间的响应和切换却几乎达不到优化的效
果。3 数学函数运算测试 前面提到的诸多 应用 领域,大量的数学运算是必需的。
许多程序的主体就是大量的数学运算,运算速度对程序的执行速度也就会有决定性的 影
响 。若能提高数学运算的速度,相应的程序的执行效率就将会得到提高。 测试项目
测试项目包括常用的三角函数运算和一些开方、次方、求模、对数等常规运算。毕竟
大量的复杂的运算也是由以上运算组合的。 测试 方法 这里对每一项的测试都使
用相同的测试方法,即让每种运算都运行固定的大量次数(这里采用百万次),得到运行
前后的时间值,求出二者之间的差值,即是运行固定次数的时间。再对同一种运算使用
Intel C++编译器进行编译前后的运行时间值进行比较即可。测试中进行运算的函数参数
皆为双精度型,对于同一种运算在使用 Intel C++编译器前后皆使用相同的参数,避免因
带入参数的不同而影响对比判断。测试中对每一个测试项目皆进行十次重复测试,对得出
的十个值取平均。 测试结果 表 2 百万次运算时间对比测试项目
sincostansqrtpowfmodLog10未采用 Intel C++编译器
(s)采用 Intel C++编译器
(s) 测试结论 从以上对各项数学函数运算
所耗时间的测试中可以看出,Intel C++编译器对数学函数运算的优化效果是比较明显
的。针对不同的运算,优化效果也不尽相同。对于同种运算在使用 Intel C++编译器前后
最差的也能将时间缩短至约原来的 2/3,最好的能达到约原来的 1/5。由此可以看出,若
将其用于涉及有较大运算量的程序中,必将较大地提高程序的处理速度,较好的满足我们
在应用中对程序速度的要求。4 总结 从以上各项指标的对比测试中,可以得出在
减少线程间的转换开销方面 Intel C++编译器并不能发挥什么作用,对于线程本身转异常
以及从异常恢复方面却能有较大的提高。考虑到异常和中断处理机制的相似性,我们也可
推断出其对中断处理效率的提高也应该是有较大作用的。在数学函数运算方面,它能发挥
出较大的作用,能较明显地提高数学函数运算的效率。因此我们认为经 Intel C++编译器
编译过的数学函数运算的代码能更为高效的执行,这对包含较多数学运算的应用程序来
讲,Intel C++编译器的使用将会对程序执行速度的提高提供帮助,从而满足相关应用领
域对处理速度的要求。 参考 文献 [1] Jeffery Richter[著],王建华[译].Windows
核心编程.北京:机械 工业 出版社,2000[2] 郑纬民,汤志忠.计算机系统结构.北京:
清华大学出版社,1998[3] 沈国宝,刘松强.实时系统性能测试.微 电子 学与探测技
术,2002,5[9]:416—419[4] Intel C++编译器产品简介