加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

花了一个晚上又做了一些改动,性能又有明显提高

(2011-03-25 22:25:55)
标签:

杂谈

   代码更复杂了。

   对12亿8千万个数做pack,

   未做汇编优化的版本耗时9秒02

   laf2优化耗时2秒11

   laf3优化耗时1秒14

   用laf3和未作汇编的版本比较,性能提高6.91倍。

 

如下:

#define dolaf3(x,y,z,o,p) "pxor %%xmm1,%%xmm1\npxor %%xmm2,%%xmm2\npxor %%xmm3,%%xmm3\npxor %%xmm4,%%xmm4\nmovhpd "#x"(%1),%%xmm1\npsllq $32,%%xmm1\nmovhpd "#y"(%1)
,%%xmm2\npsllq  $32,%%xmm2\npsrlq  $32,%%xmm2\nORPD %%xmm1,%%xmm2\nmovss "#z"(%1),%%xmm3\npsllq  $32,%%xmm3\nmovss "#o"(%1),%%xmm4\nORPD  %%xmm3,%%xmm4\npslld $"#p"
,%%xmm15\nORPD   %%xmm2,%%xmm15\nORPD   %%xmm4,%%xmm15\n"

#define laf3(x) dolaf3(x*4,128+x*4,256+x*4,384+x*4,1)

 

void PACK1(uint32_t* code,uint32_t* data,size_t n)
{
        unsigned char* des = (unsigned char*)code;
        unsigned char* src = (unsigned char*)data;

        for(int i =0,j=0;j<n;j+=128)
        {

          __asm__ __volatile__(
                "pxor %%xmm15,%%xmm15\n"
                laf3(0)
                laf3(1)
                laf3(2)
                laf3(3)
                laf3(4)
                laf3(5)
                laf3(6)
                laf3(7)
                laf3(8)
                laf3(9)
                laf3(10)
                laf3(11)
                laf3(12)
                laf3(13)
                laf3(14)
                laf3(15)
                laf3(16)
                laf3(17)
                laf3(18)
                laf3(19)
                laf3(20)
                laf3(21)
                laf3(22)
                laf3(23)
                laf3(24)
                laf3(25)
                laf3(26)
                laf3(27)
                laf3(28)
                laf3(29)
                laf3(30)
                laf3(31)

                "movdqu  %%xmm15 ,(%0)\n"
                ::"r"(des),"r"(src):"memory");
        }
        __asm__ __volatile__ (
                " sfence \n "
                ::
        );
};

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有