https://zhuanlan.zhihu.com/p/437657452

一、发展背景

1993年,Intel公司推出了奔腾处理器,该类型处理器拥有两条执行流水线,和当时的处理器相比,可以同时执行两条指令,实现超标量性能。1996年,P6系列处理器中的奔腾II处理器引入了英特尔MMX技术,这是是最早的SIMD扩展指令。后续又相继推出了SSE、SSE2、SSE3、SSSE3和SSE4指令。2008年,Intel公司宣布将推出全新的Sandy Bridge微架构,并将引入AVX指令集。此后,Intel公司相继推出了AVX2和AVX512指令集扩展。

二、指令基础

MMX技术定义了一种简单灵活的SIMD执行模型,可以用来处理64位的打包数据,该模型为IA-32架构增加了以下功能,同时保持与所有IA-32应用程序和操作系统代码的向后兼容性:

  • 64位的MMX寄存器,分为64位访问模式和32位访问模式
  • MMX寄存器支持存放8位、16位和32位整型元素
  • MMX指令集
  • CPIID指令的扩展

SSE扩展增强了SIMD执行模型,主要是通过增加了128位的XMM寄存器,实现支持128位的向量处理能力。高级矢量扩展(AVX)在XMM寄存器基础上将寄存器扩展到256位,引入了256位的向量处理能力。AVX指令集接口直接映射到AVX指令集和其他的增强的128位单指令多数据指令。AVX指令在架构上和SSE系列指令相似,不过AVX提供了超越前几代128位SIMD扩展的若干增强特性,主要包括下面几点:

  • 支持256位宽的向量和SIMD寄存器集
  • 支持三到四个操作数的语法以提高新指令的灵活性和效率
  • 加强了传统的128位指令以支持三个操作数的语法和简化高级语言表达式的编译器向量化
  • 指令的编码格式使用新前缀以便于提供紧凑高效的编码
  • 支持一个寄存器最多存放32个元素

大多数的AVX指令的命名格式如下所示:

命名中的各个条目说明如下:

三、寄存器简介

MMX指令使用的是64位MMX寄存器,如下图所示:

SSE扩展中新增的XMM寄存器如下所示:

AVX包含16个256位宽的YMM寄存器(YMM0-YMM15)YMM寄存器的低128位可称为XMM寄存器。寄存器的结构如下图所示:

AVX扩展中的寄存器使用三种C语言类型的数据结构作为操作数的类型,如下所示:

  • __m256:表示寄存器存放的是32位的单精度浮点数
  • __m256d:表示寄存器存放的是64位的双精度浮点数
  • __mm256i:表示寄存器存放的是整数类型,支持8位、16位、32位和64位

四、指令用法

除了常见的加法、减法和乘法等算术运算,AVX还支持很多其他指令,包括位运算指令、比较指令、加载存储指令、类型转换指令等。这里取部分难懂的指令说明其用法。

shuffle系列指令的一种格式是_mm256_shuffle_epi8,该指令语法如下图所示:

具体功能是将寄存器按照128位分区,对分区内的元素按照索引进行重排,图示如下:

permute系列指令的一种格式是_mm256_permute4x64_epi64,指令语法如下图所示:

实现的功能是根据imm8将新向量赋值。

broadcast系列指令的一种格式是_mm_broadcastb_epi8,指令语法如下图所示:

功能是将输入向量最低位赋值到输出向量,如下图所示:

blend系列指令的一种格式是_mm256_blendv_epi8,指令语法如下图所示:

功能是按照mask元素最高位的0或1标签将a或b中的元素填充到输出向量中,如下图所示:

gather系列指令的一种格式是_mm256_i32gather_epi64,指令语法如下图所示:

功能是按照索引向量从指定地址加载数据,scale指定值范围是1、2、4、8。功能图如下所示:

以上就是intel指令集中较为复杂的指令的简单介绍,详细使用可参见官网相关文档。

五、总结

Intel指令集的方便之处就是可在Windows平台验证,借用VS即可验证每个指令的功能。本文档只是简单介绍其发展和基本指令。

[转帖]Intel AVX 系列指令基础介绍的更多相关文章

  1. 【01】emmet系列之基础介绍

    [01]emmet系列之基础介绍 [02]emmet系列之HTML语法 [03]emmet系列之CSS语法 [04]emmet系列之编辑器 [05]emmet系列之各种缩写 相关网址 官网:http: ...

  2. Logstash学习系列之基础介绍

    Logstash功能特性 能集中处理各种类型的数据 能标准化不同模式和格式的数据 能快速的扩展自定义日志的格式 它具有收集,分析和转发数据流的功能 Logstash运行参数 -f 指定配置文件 -e ...

  3. [转帖]《吊打面试官》系列-Redis基础

    <吊打面试官>系列-Redis基础 https://www.cnblogs.com/aobing/archive/2019/11/07/11811194.html   你知道的越多,你不知 ...

  4. openresty开发系列13--lua基础语法2常用数据类型介绍

    openresty开发系列13--lua基础语法2常用数据类型介绍 一)boolean(布尔)布尔类型,可选值 true/false: Lua 中 nil 和 false 为"假" ...

  5. Linux基础介绍【第一篇】

    Linux简介 什么是操作系统? 操作系统,英文名称Operating System,简称OS,是计算机系统中必不可少的基础系统软件,它是应用程序运行以及用户操作必备的基础环境支撑,是计算机系统的核心 ...

  6. 「译」JUnit 5 系列:基础入门

    原文地址:http://blog.codefx.org/libraries/junit-5-basics/ 原文日期:25, Feb, 2016 译文首发:Linesh 的博客:JUnit 5 系列: ...

  7. [WPF系列]从基础起步学习系列计划

    引言 WPF技术已经算不什么新技术,一搜一大把关于WPF基础甚至高级的内容.之前工作中一直使用winform所以一直没有深入学习WPF,这次因项目中使用了WPF技术来实现比较酷的展示界面.我在这里只是 ...

  8. WPF入门教程系列二——Application介绍

    一.Application介绍 WPF和WinForm 很相似, WPF与WinForm一样有一个 Application对象来进行一些全局的行为和操作,并且每个 Domain (应用程序域)中仅且只 ...

  9. 快速入门系列--WebAPI--01基础

    ASP.NET MVC和WebAPI已经是.NET Web部分的主流,刚开始时两个公用同一个管道,之后为了更加的轻量化(WebAPI是对WCF Restful的轻量化),WebAPI使用了新的管道,因 ...

  10. .NET 4 并行(多核)编程系列之一入门介绍

    .NET 4 并行(多核)编程系列之一入门介绍 本系列文章将会对.NET 4中的并行编程技术(也称之为多核编程技术)以及应用作全面的介绍. 本篇文章的议题如下:  1. 并行编程和多线程编程的区别.  ...

随机推荐

  1. thymeleaf自定义标签

    前言 使用thymeleaf自定义标签,环境:springboot 2.3.7 + thymeleaf 3.0.11(2021-01-14最新版) 由于使用shiro,我们需要与thymeleaf整合 ...

  2. vue上传文件显示进度条,当上传完成后间隔一秒进度条消失

    <template> <el-upload class="avatar-uploader" action="api/file/upload" ...

  3. 数据库技术丨GaussDB(DWS)数据同步状态查看方法

    摘要:针对数据同步状态查看方法,GaussDB(DWS)提供了丰富的系统函数.视图.工具等可以直观地对同步进度进行跟踪,尤其是为方便定位人员使用,gs_ctl工具已集合了大部分相关系统函数的调用,可做 ...

  4. 有了这个数据强一致“利器”,DBA们轻松修复数据对加班“say no”

    摘要:不想加班修复数据?强一致的华为云数据库GaussDB(for Cassandra)来了-- 本文分享自华为云社区<HDC.Cloud2021|华为云GaussDB让开发者们不再加班修复数据 ...

  5. 云小课|细数那些VMware虚拟机的恢复招式

    阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 摘要:当遭遇误操作.病毒 ...

  6. 你知道,java项目中是如何获取文件地址的吗?

    摘要:在java项目中我们经常会读取配置文件,但是文件的路径在获取时我们是怎么得到的?因为我总是忘记获取文件地址的方法,就在此记录一下 本文分享自华为云社区<[Java]Java项目的绝对地址和 ...

  7. 抖音"凶猛"的幕后英雄,火山引擎 DataTester 累计做过 150 万次 A/B 测试

    在国内互联网领域,字节跳动是最为推崇 A/B 测试的公司,旗下"抖音"."今日头条"两大最著名产品,连 APP 的名字都是来源于 A/B 测试. A/B 测试( ...

  8. 火山引擎云原生数据仓库 ByteHouse 技术白皮书 V1.0 (Ⅴ)

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 近日,<火山引擎云原生数据仓库 ByteHouse 技术白皮书>正式发布.白皮书简述了 ByteHou ...

  9. 10.4K Star!程序员为程序员针对性优化的开源免费笔记

    平时我一直用Notion来记录内容为主,但也一直关注着其他开源产品.上周正好看到一款非常受欢迎的开源免费笔记,今天就推荐给大家:VNote. VNote一个由程序员为程序员打造的开源笔记应用,基于Qt ...

  10. 【每日一题】7.月月查华华的手机 (枚举 or 序列自动机)

    题目链接:Here 题意总结:\(N\) 次查询串 \(B\) 是否是 \(A\) 的子序列. 思路一 个人做法,枚举原字符串的每一位,如果匹配当前字符串的字符则 m++ 直到字符串枚举完毕或者 m ...