文档章节

SSE特殊指令集系列之二----字节绝对差值求和指令

abcijkxyz
 abcijkxyz
发布于 2016/11/22 16:46
字数 305
阅读 63
收藏 0
点赞 0
评论 0

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

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)的功能。具体原理描述如下:

 

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

 

2. SAD的SSE优化

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

   2.1 SSE optmization version 1

       

 2.2 SSE optmization version 2

    

2.3  2.1 SSE optmization version 3

     

 

 

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

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

 

 

 

 

 

 

 

本文转载自:http://www.cnblogs.com/celerychen/archive/2013/04/23/3588214.html

共有 人打赏支持
abcijkxyz
粉丝 60
博文 6196
码字总数 1876
作品 0
深圳
项目经理
如何选择纠删码编码引擎 | 纠删码技术详解(上)

作者介绍: 徐祥曦,七牛云工程师,独立开发了多套高性能纠删码/再生码编码引擎。 柳青,华中科技大学博士,研究方向为基于纠删码的分布式存储系统。 前言: 随着数据的存储呈现出集中化(以...

七仙女很忙
2017/04/13
0
0
实现高性能纠删码引擎 | 纠删码技术详解(下)

作者介绍: 徐祥曦,七牛云工程师,独立开发了多套高性能纠删码/再生码编码引擎。 柳青,华中科技大学博士,研究方向为基于纠删码的分布式存储系统。 前言: 在上篇《如何选择纠删码编码引擎...

七仙女很忙
2017/05/24
0
0
Intel 45nm制程处理器上的SSE4指令集简介

Intel 45nm制程处理器上的SSE4指令集简介 Intel的SSE(Streaming SIMD Extensions, 流式单指令多数据扩展)技术有效增强了CPU的向量运算能力。支持该指令集的处理器有8个128位xmm寄存器,每一...

日久不生情
2017/11/07
0
0
AMD发布Stream SDK v2.0 Beta开发工具

AMD最近发布了ATI Stream SDK v2.0开发工具包的最新Beta版本Stream SDK v2.0 Beta,这个版本将全面兼容OpenCL1.0编程接口界面,更令人欣喜的是,需要的用户可以自由免费地下载该开发工具包,...

红薯
2009/10/14
2.4K
0
三种移动处理器(ARM, Intel和MIPS)之间的主要区别

安卓支持3类处理器(CPU):ARM, Intel和MIPS。其中ARM无疑被使用得最为广泛。Intel因为普及于台式机和服务器而被人们所熟知,然而对移动行业影响力相对较小。MIPS在32位和64位嵌入式领域中历史...

micf435p6d221ssdld2
2017/12/17
0
0
(学习心得):进程,线程,超线程,并发,并行 等概念

前言: 此陋文来自最近对阅读《深入理解计算机系统》与《微型计算机体系结构:Intel Core Duo / i 系列微处理器技术应用》两本书的学习体会, 前者从 程序员的视角来探讨计算机系统中各部件的...

shayi
2012/11/26
5.5K
28
Flat Assembler 1.70 发布,汇编工具

Flat Assembler 是一个快速高效的80x86的汇编工具,支持DOS、Windows、Linux操作系统,支持包括 8086-80486/Pentium instructions with MMX, SSE, SSE2, SSE3, and 3DNow! extensions and x......

红薯
2012/04/19
1K
10
如何选择并实现高性能纠删码编码引擎案例(上)

前言 随着数据的存储呈现出集中化(以分布式存储系统为基础的云存储系统)和移动化(互联网移动终端)的趋势,数据可靠性愈发引起大家的重视。集群所承载的数据量大大上升,但存储介质本身的...

linuxprobe16
05/26
0
0
cpu指令集包括哪些?

如题!我知道有mmx,sse等等.可是mmx指令集是在96年才有的, 而之前386,486,586等那些呢,包含哪些指令,相关资料在哪下载? 是不是sse1包含mmx,,,,,,,sse2包含sse1,,,,,,,sse3包含sse2 我知道去英...

音乐&编程
2012/09/14
2.1K
3
Intel Software Development Emulator

Intel Software Development Emulator 是一款模拟Intel未来扩展指令集功能的仿真器。仿真器是基于Pin动态二进制仪器系统(和XED)。 它可以模拟在SSE4, AES,PCLMULQDQ中新的指令集功能和RTM...

叶秀兰
2013/12/08
209
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

StringUtils类中isEmpty与isBlank的区别

org.apache.commons.lang.StringUtils类提供了String的常用操作,最为常用的判空有如下两种isEmpty(String str)和isBlank(String str)。 StringUtils.isEmpty(String str) 判断某字符串是否为...

说回答
8分钟前
0
0
react native使用redux快速上手

先看个简单demo //app.jsimport React, {Component} from 'react';import {StyleSheet, Button, View} from 'react-native';import TestView from './src/testView'export default......

燕归南
10分钟前
0
0
页面输出JSON格式数据

package com.sysware.utils;import java.io.IOException;import javax.servlet.ServletResponse;import org.apache.log4j.Logger;import com.sysware.SyswareConstant;pub......

AK灬
31分钟前
0
0
springCloud-2.搭建Eureka Client的使用

1.使用IDEA,Spring Initializr创建 2.填写项目资料 3.选择spring boot版本,插件选择Cloud Discovery→Eureka Discovery 4.选择保存地址 5.修改application.yml eureka: client: s...

贺小康
34分钟前
0
0
CenOS 6.5 RPM 安装 elasticsearch 6.3.1

下载 wget --no-check-certificate https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.3.1.rpm...

阿白
37分钟前
0
0
1.4 创建虚拟机&1.5 安装CentOS7&1.6 配置ip(上)&1.7 配置ip(下)

1.4 创建虚拟机 知识点 虚拟机网络链接模式 桥连 直接将虚拟网卡桥接到一个物理网卡上面。需要手工为虚拟系统配置IP地址、子网掩码,而且还要和宿主机器处于同一网段,这样虚拟系统才能和宿主...

小丑鱼00
43分钟前
0
0
TrustAsia(亚洲诚信)助力看雪2018安全开发者峰会

2018年7月21日,看雪2018安全开发者峰会在北京国家会议中心圆满落下帷幕。拥有18年悠久历史的老牌安全技术社区——看雪学院联手国内最大开发者社区CSDN,汇聚业内顶尖的安全开发者和技术专家...

亚洲诚信
44分钟前
0
0
Spring注解介绍

@Resource、@AutoWired、@Qualifier 都用来注入对象。其中@Resource可以以 name 或 type 方式注入,@AutoWired只能以 type 方式注入,@Qualifier 只能以 name 方式注入。 但它们有一些细微区...

lqlm
54分钟前
0
0
32位汇编在64位Ubuntu上的汇编和连接

本教程使用的操作系统是Ubuntu Linux 18.04 LTS版本,汇编器是GNU AS(简称as),连接器是GNU LD(简称ld)。 以下是一段用于检测CPU品牌的汇编小程序(cpuid2.s): .section .dataoutput...

ryanliue
今天
0
0
CentOS系统启动报错Failed to mount /sysroot解决方法

xfs_repair -v -L /dev/dm-0

Mr_Tea伯奕
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部