SIMD Technology and Streaming SIMD Extension 2

可以提升处理器性能的一种办法就是并行的执行多个计算,这样可以使用单条指令处理多个计算操作。实现这个办法就是使用单指令多数据(SIMD)计算技术。

下图是一个典型的SIMD计算。一条指令指定要进行的计算类型(OP表示),8个数据元素(X1, X2, X3, X4和Y1, Y2, Y3, Y4)分成了两组,分别紧缩在各自的数据结构中。相应的数据元素对(X1与Y1; X2与Y2; X3与Y3; X4与Y4)同时执行相同的计算操作。计算的结果也是相应的紧缩数据元素。

上图描述的SIMD计算方式,最早是由IA32架构引入的MMX技术实现。MMX技术可以对存储在8个64位的MMX寄存器中的紧缩的字节,单字和双字上进行SIMD计算。MMX寄存器集参看下图。

Pentium III处理器扩展了最初的SIMD计算模型,引入了Streaming SIMD Extension,即SSE技术。SSE技术可以对紧缩的单精度浮点数进行SIMD计算,这些操作数可以位于存储器中或者8个128位的XMM寄存器中。 每个单精度浮点数是32比特位长,所以一个XMM寄存器可以保存4个浮点数据元素。内存中的操作数也遵循128位长。XMM寄存器参看下图:

此外,SSE还扩展了SIMD计算能力(即MMX指令集),引入了若干额外的64位的MMX指令。

Pentium 4处理器进一步扩展了SIMD计算模型,引入了SSE2指令集。SSE2没有增加新的寄存器,依然利用存储器操作数和128位的XMM寄存器进行计算。但是引入了两种新的数据类型:紧缩的双精度浮点数据类型以及128位的紧缩的整型数据类型。因此SSE2的144条指令可以操作如下的数据类型及其数据元素:2个紧缩的双精度浮点数,16个紧缩的字节,8个紧缩的单字,4个紧缩的双字,以及2个紧缩的四字类型。

注:回忆一下:SSE指令集只能操作4个紧缩的单精度浮点数。

MMX指令集与SSE/SSE2指令集联合在一起,使得程序员具有了操作(即设计算法)紧缩的64位/128位整型,以及单精度/双精度浮点数的能力。

SIMD计算能力提升了3D图形处理,语音识别,图像处理,科学计算,以及其他多媒体程序的性能。这些程序具有如下的特征:

  • 内在的计算并行性
  • 规律的,重复的内存访问模式
  • 局部的,重复的操作数据
  • 独立于数据的控制流

IA32架构上的 SIMD浮点指令完全遵循IEEE 754二进制浮点算术标准。而且这些指令在处理器的各种执行模式下都可用:模式模式,实地址模式,以及虚拟8086模式。

SSE/SSE2技术和MMX技术是对IA32体系结构在架构层面上的增强扩展。所有的现有软件,无需修改,都可以继续正确地运行在采用了这些技术的处理器上。现有软件也可以和使用了这些技术的新软件共同运行,互不干扰。

SSE和SSE2指令集也引入了控制数据可缓存性以及存储器操作的指令,用来提升高速缓存的利用率和程序性能。

Summary of SIMD Technology

下面我们按时间顺序总结一下添加到IA32架构上的SIMD技术的新特性:

MMX技术

  • 64位MMX寄存器
  • MMX指令操作紧缩的字节,单字,双字整型数据
  • MMX指令主要用于多媒体及通信软件
  • MMX技术的PRM:Order#:243007-002

SSE技术

  • 128位XMM寄存器
  • SSE指令操作紧缩的单精度浮点数据类型
  • 引入数据预取指令
  • 引入非临时存储指令(non-temporal instruction)以及其他的数据可缓存性指令,内存排序指令
  • 新增额外的64位SIMD整型指令(即相当于扩充了MMX指令集)
  • SSE技术主要用于3D几何,3D渲染,语音识别,以及视频编解码

SSE2技术

  • 新增128位紧缩的双精度浮点数据类型
  • 新增128位SIMD整型操作指令,作用于16字节,8单字,4双字,或2四字紧缩数据类型
  • 新增支持对64位整型操作数进行SIMD计算
  • 新增指令用于新增与现存数据类型进行转换
  • 扩展对data shuffling的支持
  • 扩展对可缓存性与内存排序操作的支持
  • SSE2指令主要用于3D图形,视频编解码,以及加密计算

Pentium 4处理器架构/微架构/流水线 (2) - SSE2相关推荐

  1. Pentium 4处理器架构/微架构/流水线(1) - 概述

    Pentium 4 Architecture Overview 本节简要的介绍Pentium 4处理器的关键特性.这些特性提供了很好背景知识,用于理解详细的代码优化原则. Pentium 4处理器上用 ...

  2. Intel Core Solo/Duo处理器架构/微架构/流水线 - 前端/数据预取/SSE3

    Intel Core Solo/Duo处理器采用的微架构类似于Pentium M处理器的微架构,但是在性能和功能方面做了进一步的增强,主要包括: Intel智能缓存 – Intel Core Duo的 ...

  3. Intel(R) 处理器产品架构/微架构对照表

    Intel(R) 处理器与微架构对照表 2020/12/23:更新至IceLake/TigerLake微架构 2019/07/09:更新至 2nd Generation Intel® Xeon® Sc ...

  4. Pentium M处理器架构/微架构/流水线(1) - 流水线概述

    Intel® Pentium® M Processor 与Intel NetBurst微架构类似,Intel Pentium M处理器微架构 的流水线也包括3个主要部分: 有序发射前端 乱序超标量执行 ...

  5. Pentium 4处理器架构/微架构/流水线 (9) - NetBurst执行核详解 - 执行单元与发射口

    Execution Units and Issue Ports 每个时钟周期,执行核可能向4个发射口中的1个或多个口分发微指令.在微架构层面,存储操作进一步被分为两个部分:存储数据以及存储地址操作.下 ...

  6. Pentium 4处理器架构/微架构/流水线 (7) - NetBurst前端详解 - 分支预测

    Branch Predication 对于使用深度指令流水线的处理器,分支预测能力至关重要.分支预测使得处理器可以在分支指令决断之前就开始执行(预测的)分支路径指令.分支延迟是由于分支预测错误导致的性 ...

  7. Pentium 4处理器架构/微架构/流水线 (6) - NetBurst前端详解 - 取指/译码/缓存

    Intel NetBurst Pipeline Details Front End Pipeline Details 本节讲述的关于流水线前端操作的详细信息可能会对软件在指令预取,分支预测以及执行跟踪 ...

  8. Pentium 4处理器架构/微架构/流水线 (4) - NetBurst框图

    Intel NetBurst Microarchitecture Overview 与前几代处理器一样,Pentium 4的微架构包括3个主要部分: 有序发射前端 乱序超标量执行核 有序退役单元 流水 ...

  9. Pentium 4处理器架构/微架构/流水线 (3) - NetBurst微架构

    Pentium 4 Intel® NetBurst™ Micro-architecture Details Pentium 4处理器是Intel全新NetBurst微架构 的第一代处理器实现(其实也是 ...

  10. Pentium M处理器架构/微架构/流水线 (2) - 数据预取/乱序核/退役单元

    Data Prefetching Intel Pentium M处理器支持3种预取机制: 第一种是硬件指令预取,已在上面章节中讲述 第二种是自动的将数据预取到二级缓存.这个机制基本上与Intel Ne ...

最新文章

  1. python如何编写数据库_如何在几分钟内用Python编写一个简单的玩具数据库
  2. layui时间怎么设置年月日时分秒_layui-laydate时间日历控件使用方法详解
  3. 时间同步-ntp服务器的搭建(docker版本)
  4. 奶源向左配方向右,飞鹤、澳优、贝因美们要如何重振国产奶粉?
  5. c++生成光栅条纹程序_【光学学报】激光分束,自由曲面分束器能挑战相位光栅吗?...
  6. linux逻辑分区最小值,linux 逻辑卷管理 调整分区大小
  7. 给新手程序猿的16个必备小妙招
  8. div为空的时候 浮动没有效果_3种CSS清除浮动的方法
  9. web developer tips (78):使用文档大纲导航
  10. 11.6 MariaDB安装 11.7/11.8/11.9 Apache安装
  11. javascript-注释-字符串数据类型的方法
  12. 关于Unable to load annotation processor factory 的故障
  13. Linux下LAMP服务配置
  14. string的replaceAll()
  15. 软件设计模式概述(摘自《研磨设计模式》)
  16. 使用触发器对学生表操作进行日志记录
  17. 利用栈实现精制转换c++
  18. 六大基酒——朗姆酒的喝法
  19. ue4网格转地形_UE4 山脉风景地形模型
  20. linux磁盘占用满了,docker日志清理

热门文章

  1. 机器学习十大经典算法之逻辑回归
  2. VGGnet论文解读及代码实现
  3. cvtcolor python opencv_13行代码实现:Python实时视频采集(附源码)
  4. springboot 多数据源_SpringBoot整合多数据源的巨坑一
  5. cad怎么选择一个对象打散vba_CAD制图的二十四字秘诀!
  6. mysql的游标处理_mysql 存储过程、游标及逐行处理的配合使用
  7. python 源码编译教程_python源码编译
  8. c语言删除一个字符指令,【C语言】实现一个基于命令行的文本编辑器
  9. python批量读取用例的方法
  10. arcgis属性表选择两个条件_ARCGIS关联属性表(转)