Chinaunix首页 | 论坛 | 博客
  • 博客访问: 140798
  • 博文数量: 41
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 307
  • 用 户 组: 普通用户
  • 注册时间: 2013-08-15 18:48
文章分类

全部博文(41)

文章存档

2015年(5)

2014年(23)

2013年(13)

我的朋友

分类: 嵌入式

2013-08-22 20:13:51

                                              SIMD指令简介

    SIMD指令(Single Instruction Multiple Data,单指令多数据流指令)(其主要用在多媒体上)是一种并行语

句,包括MMX、SSE1、SSE2、SSE3、SSE4。它主要将多个相同数据

(8位、16位、32位、64位)打包在一个128位(xmm,8个)或64位(mm,8个)寄存器上,同时

对其进行相同运算(加减乘除、移动、逻辑运算等等),从而加快了运算速率。比如对

一个float型数据(32位),将其存入xmm(128位)中,同时对其进行相同处理,可使得运

算速率变为原来的4倍。

    常用的SIMD语句主要如下:

移动      加        减    求最大值   
movdqu   paddw    psubw   pmaxsw    pmullw    __int16型(16位,128/16=8)
movd     paddd    psubd   pmaxsd    pmulld    int型(32位,128/32=4)
movups   addps    subps   maxps     mulps     浮点型(32位,128/32=4)

 

关于SIMD语句在Visual Studio中的使用,我们可以通过两种方式,一是建立专门的asm文件,二是通过在C文件中内嵌汇编语句的方式,格式为__asm{  }。下面是一个简单的SIMD指令的例子:

   __int16 test1[8]={1,2,3,2,9,2,2,6};
   __int16 test2[8]={3,4,5,3,2,5,4,3};
    __asm{
    movdqu xmm0,test1
    movdqu xmm1,test2
    paddw xmm0,xmm1
    psubw xmm0,xmm1
    pmaxsw xmm1,xmm0
    pmullw xmm0,xmm1
    movdqu test1,xmm0
    movdqu test2,xmm1
 for(int i=0;i<8;i++)

 printf("test1[%d]=%d,test2[%d]=%d\n",i,test1[i],i,test2[i]); 


 

阅读(3554) | 评论(0) | 转发(0) |
0

上一篇:ARM 中MMU与cache

下一篇:ARM流水线

给主人留下些什么吧!~~