Viusal C++.NET 2003 的优化代码
前言
人们在使用一个新的编程工具时总会感到缺乏自信,本文试图让你对vc的代码优化有更直观的感觉,希望你能通过阅读本文从vc中"得到"更多的东西。
visual c++ .net 2003
vc.net 2003不仅带来了两个新的优化选项,它还改进了vc.net 2002中一些优化的性能。
第一个新增选项是"/g7",它告诉编译器对intel pentium 4和amd athlon处理器进行优化。
使用"/g7"选项编译的程序,当我们和vc.net 2002生成的代码比较时发现,它通常能使典型的程序的运行速度提高5到10个百分点,如果使用了大量浮点代码甚至能提高10到15个百分点。而提高的优化程度可能很高也可能较低,在一些使用最新cpu和"/g7"选项的测试中,甚至提高了20%的性能。
使用"/g7"选项不代表生成的代码只能运行在intel pentium 4和amd athlon处理器上。这些代码仍可以运行在老的cpu上,只是在性能表现上可能有"小小的惩罚"。另外,我们观察到一些程序使用"/g7"后在amd athlon上运行的比用intel pentium 4更慢。
当没使用"/gx"选项时,编译器会默认使用"/gb"选项,此时为"blended"优化模式。在vc.net 2002和vc.net 2003中,"/gb"代表"/g6",即为intel pentium pro, pentium ii, pentium iii处理器优化。
这儿有一个例子,它展示了做与常整数乘法时使用pentium 4和"/g7"的优化效果,下面是源代码:
int i;
…
// do something that assigns a value to i.
…
return i*15;
当使用"/g6"时,生成了目标代码:
mov eax, dword ptr _i$[esp-4]
imul eax, 15
当使用"/g7"时,生成了更快(可惜更长)的代码,它没用imul(乘)指令,在pentium 4上执行只需要14个周期。目标代码如下:
mov ecx, dword ptr _i$[esp-4]
mov eax, ecx
shl eax, 4
sub eax, ecx
第二个优化选项是"/arch:[argument]",用它可对sse或sse2优化,生成使用streaming simd extensions (sse) 和 streaming simd extensions 2 (sse2) 指令集的程序。当使用"/arch:sse"选项时,目标代码只能运行在支持sse指令(如:cmov, fcomi, fcomip, fucomi, fucomip)的cpu上。当使用"/arch:sse2"选项时,目标代码只能运行在支持sse2指令集的cpu上。
相比于"/g7",使用了sse或sse2优化的程序,一般能减少2-3%的运行时间,个别测试中甚至能减少5%的运行时间。
使用"/arch:sse"可得到以下效果:
1。在使用单精度浮点数时,使用sse指令对其处理。
2。使用cmov指令,它最早被pentium pro支持。
3。使用fcomi, fcomip, fucomi, fucomip指令,它们也是最早被pentium pro支持的。
Tag: 优化代码
文章整理:iocblog
版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。