[转帖]Intel AVX 系列指令基础介绍
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 系列指令基础介绍的更多相关文章
- 【01】emmet系列之基础介绍
[01]emmet系列之基础介绍 [02]emmet系列之HTML语法 [03]emmet系列之CSS语法 [04]emmet系列之编辑器 [05]emmet系列之各种缩写 相关网址 官网:http: ...
- Logstash学习系列之基础介绍
Logstash功能特性 能集中处理各种类型的数据 能标准化不同模式和格式的数据 能快速的扩展自定义日志的格式 它具有收集,分析和转发数据流的功能 Logstash运行参数 -f 指定配置文件 -e ...
- [转帖]《吊打面试官》系列-Redis基础
<吊打面试官>系列-Redis基础 https://www.cnblogs.com/aobing/archive/2019/11/07/11811194.html 你知道的越多,你不知 ...
- openresty开发系列13--lua基础语法2常用数据类型介绍
openresty开发系列13--lua基础语法2常用数据类型介绍 一)boolean(布尔)布尔类型,可选值 true/false: Lua 中 nil 和 false 为"假" ...
- Linux基础介绍【第一篇】
Linux简介 什么是操作系统? 操作系统,英文名称Operating System,简称OS,是计算机系统中必不可少的基础系统软件,它是应用程序运行以及用户操作必备的基础环境支撑,是计算机系统的核心 ...
- 「译」JUnit 5 系列:基础入门
原文地址:http://blog.codefx.org/libraries/junit-5-basics/ 原文日期:25, Feb, 2016 译文首发:Linesh 的博客:JUnit 5 系列: ...
- [WPF系列]从基础起步学习系列计划
引言 WPF技术已经算不什么新技术,一搜一大把关于WPF基础甚至高级的内容.之前工作中一直使用winform所以一直没有深入学习WPF,这次因项目中使用了WPF技术来实现比较酷的展示界面.我在这里只是 ...
- WPF入门教程系列二——Application介绍
一.Application介绍 WPF和WinForm 很相似, WPF与WinForm一样有一个 Application对象来进行一些全局的行为和操作,并且每个 Domain (应用程序域)中仅且只 ...
- 快速入门系列--WebAPI--01基础
ASP.NET MVC和WebAPI已经是.NET Web部分的主流,刚开始时两个公用同一个管道,之后为了更加的轻量化(WebAPI是对WCF Restful的轻量化),WebAPI使用了新的管道,因 ...
- .NET 4 并行(多核)编程系列之一入门介绍
.NET 4 并行(多核)编程系列之一入门介绍 本系列文章将会对.NET 4中的并行编程技术(也称之为多核编程技术)以及应用作全面的介绍. 本篇文章的议题如下: 1. 并行编程和多线程编程的区别. ...
随机推荐
- 面试官:禁用Cookie后Session还能用吗?
Cookie 和 Session 是 Web 应用程序中用于保持用户状态的两种常见机制,它们之间既有联系也有区别. Cookie 是由服务器在 HTTP 响应中发送给客户端(通常是浏览器)的一小段数据 ...
- 案例集锦|科技赋能,华为云GaussDB助千行百业数字化转型
当下,全社会驶入数字化转型快车道,以科技赋能.智慧转型为主旨的数字生态推动着千行百业的变革.数据库作为企业核心数据底座,华为云提供了安全可靠的云原生底座和一站式上云解决方案.其中华为云GaussDB覆 ...
- 一文带你解读Volcano架构设计与原理
摘要:Volcano主要是基于Kubernetes做的一个批处理系统,希望上层的HPC.中间层大数据的应用以及最下面一层AI能够在统一Kubernetes上面运行的更高效. Volcano产生的背景 ...
- 如何做好分支管理,保证高效CI/CD?
摘要:一文讲述git分支管理策略. 本文分享自华为云社区<如何做好分支管理,保证高效CICD?>,作者:华为云PaaS服务小智. 引言 CI/CD是DevOps 的基础核心,做好CI/CD ...
- 8种图数据库对 NULL 属性值支持情况
摘要:在语义网等图模型中,遵循开放世界假设,对于数据中未包含的事实,都认为是未知的而非假的. 本文分享自华为云社区<图数据库对 NULL 属性值支持情况>,原文作者:你好_TT . NUL ...
- 如何给网页和代码做HTML加密?
如何给网页和代码做HTML加密? 本篇文章给大家谈谈html混淆加密在线,以及HTML在线加密对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔. 如何给代码加密? 1.源代码加密软件推荐使 ...
- 取消 SQL Server 密码复杂度
可以先设置一个复杂密码,安装完成后,进入数据库,执行下列命令,关闭复杂密码策略及修改简单密码 ALTER LOGIN sa WITH PASSWORD = '新密码', CHECK_POLICY = ...
- 成为一个合格程序员所必备的三种常见LeetCode排序算法
排序算法是一种通过特定的算法因式将一组或多组数据按照既定模式进行重新排序的方法.通过排序,我们可以得到一个新的序列,该序列遵循一定的规则并展现出一定的规律.经过排序处理后的数据可以更方便地进行筛选和计 ...
- CodeFormer一款既能人脸修复、还能视频去码的AI软件,附下载使用教程
CodeFormer是一款强大的人工智能工具,主要用于图像和视频的修复和增强.它基于深度学习技术,特别是人脸复原模型,可以轻松修复和增强面部图像,提升照片和视频的质量和视觉效果 工作原理 1.通过自动 ...
- 【HZERO】feign调用
feign调用 https://open.hand-china.com/community/detail/603204901962649600 # Hiam获取用户信息示例