小编eps*_*1on的帖子

使用XMM0寄存器和内存提取(C++代码)的速度是仅使用XMM寄存器的ASM的两倍 - 为什么?

我正在尝试实现一些内联汇编程序(在Visual Studio 2012 C++代码中)以利用SSE.我想添加7个数字1e9次,所以我把它们从RAM放到xmm0到xmm6的CPU寄存器中.当我使用此代码在visual studio 2012中使用内联汇编时:

C++代码:

for(int i=0;i<count;i++)
        resVal+=val1+val2+val3+val4+val5+val6+val7;
Run Code Online (Sandbox Code Playgroud)

我的ASM代码:

int count=1000000000;

    double resVal=0.0;
       //placing values to register
    __asm{  
        movsd xmm0,val1;placing var1 in xmm0 register  
        movsd xmm1,val2  
        movsd xmm2,val3  
        movsd xmm3,val4  
        movsd xmm4,val5  
        movsd xmm5,val6  
        movsd xmm6,val7  
        pxor xmm7,xmm7;//turns xmm7 to zero
         }

    for(int i=0;i<count;i++)
    {
        __asm
        {
            addsd xmm7,xmm0;//+=var1
            addsd xmm7,xmm1;//+=var2
            addsd xmm7,xmm2;
            addsd xmm7,xmm3;
            addsd xmm7,xmm4;
            addsd xmm7,xmm5;
            addsd xmm7,xmm6;//+=var7
        }

    }

    __asm
        {
            movsd resVal,xmm7;//placing xmm7 into resVal
        }
Run Code Online (Sandbox Code Playgroud)

这是来自C++编译器的代码'resVal + = val1 + val2 + …

c++ optimization performance assembly sse2

6
推荐指数
1
解决办法
3105
查看次数

标签 统计

assembly ×1

c++ ×1

optimization ×1

performance ×1

sse2 ×1