SSE特殊指令集系列之二

摘要:
本文要谈的是这样一条指令:PSADBW这条指令是SSE1引入的用于视频编码绝对差值求和的指令。具体原理描述如下:计算完ABS之后还需要把字节型数据扩展为字型数据,这样,以方便累加不会溢出。较为完整的代码如下:2.SAD的SSE优化直接使用PSADBW指令,非常简洁。而SSE的第三个版本使用的非对齐的数据加载指令MOVDQU指令。

本文要谈的是这样一条指令:

PSADBW

这条指令是SSE1引入的用于视频编码绝对差值求和的指令。

在视频编码中的运动估计模块,一种常见的SAD代码如下:

1 //Get the SAD 16x16 macro block with full pixel
2  for (y = 0; y < 16; y++)
3    for(x = 0; x < 16; x++)
4     sad += abs(current[y][x] - reference[y][x])

对于这段代码,我们首先来用MMX指令做优化。

1. SAD的MMX优化

我们使用带饱和运算的PSUBUSB指令来实现求ABS (B - A)的功能。具体原理描述如下:

SSE特殊指令集系列之二第1张

计算完ABS之后还需要把字节型数据扩展为字型数据,这样,以方便累加不会溢出。较为完整的代码如下:

SSE特殊指令集系列之二第2张

2. SAD的SSE优化

直接使用PSADBW指令,非常简洁。

2.1 SSE optmization version 1

SSE特殊指令集系列之二第3张

2.2 SSE optmization version 2

SSE特殊指令集系列之二第4张

2.32.1 SSE optmization version 3

SSE特殊指令集系列之二第5张

注意:SSE第一个版本使用的是MMX寄存器,而第二个版本和第三版本使用的是128位的XMM寄存器。

而SSE的第三个版本使用的非对齐的数据加载指令 MOVDQU指令。

免责声明:文章转载自《SSE特殊指令集系列之二》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇OpenCV学习系列教程第一篇:处理鼠标事件ie 9 select 下拉框 右侧 箭头下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

X86架构与ARM架构比较(摘录自网络)

引言  CPU是怎样运作的?   CPU的运作与人脑的运作差不多。先谈一下人这个系统的工作方式。眼镜、耳朵、舌头、皮肤等等感觉器官接收到“触觉”,把信息传给大脑,大脑把信息处理后,把处理结果送给手、脚、嘴等执行器官就可以运动了。   人脑的功能就是从某个感觉器官读取信息,处理信息,然后再把结果送给执行器官。   一个完整的系统与人这个系统差不多,传感器接收...

关于跨平台的一些认识

前段时间看了 周志明的那本 《深入理解java虚拟机》。对于平台无关性问题,有了一些新的认识。所以特写一篇博客来进行总结。 这是我的第一篇不针对具体技术,而只针对计算机系统和原理的博客文章,而这种话题,总是比较宽泛,而我本人的水平有限,所以我也只能泛泛的写写,思考的不对的地方,还望读者不吝批评。 C为什么不能跨平台 咱们先来讨论一下,C语言的执行过程,从而...

IOS中armv7,armv7s,arm64以及i386和x86_64讲解

一、前言问题 在iOS 开发过程中,估计比较少的人会在意armv7,armv7s,arm64这些概念,如果在意可能也是项目中出现了像下面的问题,才会想起来解决这些问题,但还是不是特别的理解,这些概念,今天写这篇博客,希望大家对这些概念有所了解。 上面的这个问题,是我用自己手机iPhone 7p真机运行的,关于配置如下: 如果出现上面的问题,我们在val...

linux内核学习as86语法

as86(1)                                                             名称 as86 - as86-8086..80386处理器的汇编程序 概要格式      as86  [-0123agjuw]  [-lm[list]]  [-n name]  [-o obj] [-b[bin]] [-s...

痞子衡嵌入式:ARM Cortex-M内核那些事(5)- 一表搜罗指令集

  大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是ARM Cortex-M指令集。 指令集 指令长度(bits) 包含指令 CortexM0 CortexM0+ CortexM1 CortexM3 CortexM4 CortexM7 CortexM23 CortexM33 Thumb-1 16 ADC, ADD, ADR, AN...

计算机CPU之CISC、RISC、x86、IA32、x86-64、IA64、ARM

CPU  中央处理器(central processing unit,CPU)作为计算机系统的运算和控制核心,是信息处理、程序运行的最终执行单元。   中央处理器(CPU),是电子计算机的主要设备之一,电脑中的核心配件。其功能主要是解释计算机指令以及处理计算机软件中的数据。CPU是计算机中负责读取指令,对指令译码并执行指令的核心部件。中央处理器主要包括两个...