自动矢量器使用 在 MSDN 文档中,现在编译器自动性能方面的原因是有能力的"概述"循环和支持 SIMD 指令,这是大多数情况下调用自动性能的话,对于所有 X 86 处理器 / X 64 现代的处理器中运行的速度要快 8 倍。 与 Visual Studio 11 的预览版本中,SIMD 指令和概述记录是自动优化使用。 与 Visual Studio 2010 年 c/c + + 中下面的循环
[cpp] view plaincopy
- 1.for (int i=0;i <MAX_;i++)
- 2. {
- 3. a=i*7.0;
- 4. }
给出下面的汇编程序代码用于指令和寄存器操纵的浮点数。(fld、 fmul、 fstp、 fstp、 ST (1) (0)、 ST )) [cpp] view plaincopy
- 1.; 38 : for (int i=0;i <MAX_;i++)
- 2.
- 3. fld QWORD PTR __real@401c000000000000
- 4. add esp, 4
- 5. mov esi, eax
- 6. xor eax, eax
- 7. mov DWORD PTR _i$83361[ebp], eax
- 8.$LN3@wmain:
- 9.
- 10.; 39 : {
- 11.; 40 : a=i*7.0;
- 12.
- 13. fild DWORD PTR _i$83361[ebp]
- 14. inc eax
- 15. mov DWORD PTR _i$83361[ebp], eax
- 16. fmul ST(0), ST(1)
- 17. fstp QWORD PTR [esi+eax*8-8]
- 18. cmp eax, 100000000 ; 05f5e100H
- 19. jl SHORT $LN3@wmain
- 20.
- 21.; 41 : }
Visual Studio 11 在相同的环路循环中,在默认情况下,下面的代码是在汇编程序的特定的跟踪记录代码实现。(movsd、 超低、 cvtdq2pd、 xmm0、 xmm1 ))
[cpp] view plaincopy
- 1.; 38 : for (int i=0;i <MAX_;i++)
- 2.
- 3. movsd xmm1, QWORD PTR __real@401c000000000000
- 4. add esp, 4
- 5. mov esi, eax
- 6. xor ecx, ecx
- 7. npad 5
- 8.$LL9@wmain:
- 9.
- 10.; 39 : {
- 11.; 40 : a=i*7.0;
- 12.
- 13. movd xmm0, ecx
- 14. cvtdq2pd xmm0, xmm0
- 15. inc ecx
- 16. mulsd xmm0, xmm1
- 17. movsd QWORD PTR [esi+ecx*8-8], xmm0
- 18. cmp ecx, 100000000 ; 05f5e100H
- 19. jl SHORT $LL9@wmain
- 20.
- 21.; 41 : }
是可能要禁用此功能吗? 是不足以转到该属性的 c + + 项目, 。代码生成。启用增强指令集和选择号增强说明 (/ 拱: IA32) (默认情况下,它是没有设置,这意味着是否启用了自动矢量化角),如下图所示 ![]()
在测试机器,未设置,对应: SSE2. 它是影响性能吗? 是对 1 万的迭代循环,看下优化以后的效果 没有说明 ![]()
说明 ![]()
自动并行 在文档中表示,现在已经可以利用多处理器使用 VS 11的并行处理功能,就能够启动多核优化的功能。新的指令/Qpar ,可启用此功能。 ![]()
加速 c + + 的大规模并行处理 (AGP) 支持 VS 11 将使它也能够利用 GPGPU 中的图形卡的可能性。换句话说,它将可以混合使用传统代码 CPU 和 GPU 代码。
|