[转帖]Intel AVX 系列指令基础介绍

intel,avx,系列,指令,基础,介绍 · 浏览次数 : 0

小编点评

**Intel指令集的发展背景** * 1993年,Intel推出了奔腾处理器,该处理器拥有两条执行流水线,可以同时执行两条指令,实现超标量性能。 * 1996年,P6系列处理器中的奔腾II处理器引入了英特尔MMX技术,这是最早的SIMD扩展指令。 * 2008年,Intel公司宣布将推出全新的Sandy Bridge微架构,并将引入AVX指令集。 * 2012年,Intel推出了新的指令集XMM,是MMX指令的升级版。 **指令基础** * MMX技术是一种简单灵活的SIMD执行模型,可以用来处理64位的打包数据。 * AVX指令集是一种超越前几代128位SIMD扩展的指令集,支持256位宽的向量和SIMD寄存器集支持三到四个操作数的语法以提高新指令的灵活性和效率加强了传统的128位指令以支持三个操作数的语法和简化高级语言表达式的编译器向量化指令的编码格式使用新前缀以便于提供紧凑高效的编码支持一个寄存器最多存放32个元素大多数的AVX指令的命名格式如下所示:命名中的各个条目说明如下: * 三、寄存器简介MMX指令使用的是64位MMX寄存器,如下图所示: ``` MMX寄存器 ``` * AVX包含16个256位宽的YMM寄存器(YMM0-YMM15)YMM寄存器的低128位可称为XMM寄存器。 **总结** Intel指令集是一种功能强大的指令集合,可以满足各种编程需求。它具有很高的性能和易于使用,使其成为目前编程中最常用的指令集之一。

正文

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 系列指令基础介绍相似的内容:

[转帖]Intel AVX 系列指令基础介绍

https://zhuanlan.zhihu.com/p/437657452 一、发展背景 1993年,Intel公司推出了奔腾处理器,该类型处理器拥有两条执行流水线,和当时的处理器相比,可以同时执行两条指令,实现超标量性能。1996年,P6系列处理器中的奔腾II处理器引入了英特尔MMX技术,这是是

[转帖]SIMD指令集 SSE/AVX

SIMD指令集 SSE/AVX 概述 参考手册 Intel® Intrinsics Guide Tommesani.com Docs Intel® 64 and IA-32 Architectures Software Developer Manuals 背景 1. 什么是指令集 所谓指令集,就是C

[转帖]Intel至强可扩展处理器 Skylake-SP(Purley 最新一代至强)购买指南

前言 Intel Purley平台,Skylake-SP,至强可扩展处理器(铂金、黄金、白银、青铜)发售了,共58颗处理器。 这些处理器里哪些值得购买?哪些是骗小白的?它们各自的定位如何?本文将帮助你解决问题。 本文将会按照使用场景将这58颗处理器分类,并通过不同处理器在各自应用场景的性价比剔除一些

[转帖]Intel/英特尔、Mellanox/迈络斯 infiniband交换机型号对比及参数描述

Intel/英特尔、Mellanox/迈络斯 infiniband交换机型号对比及参数描述http://qlogic.blog.bokee.net/bloggermodule/blog_viewblog.do?id=17662812 字体大小:大 | 中 | 小2014-05-09 12:14 阅读

[转帖]Intel正式发布第三代至强可扩展处理器,单芯最多可达40核

https://baijiahao.baidu.com/s?id=1673640229820868010&wfr=spider&for=pc 今天晚上Intel正式发布了第三代至强可扩展处理器,也就是说了很久的Ice Lake-SP,这是他们首款10nm工艺的数据中心处理器,现在个处理器最多拥有40

[转帖]Intel关NUMA的内存编址

https://zhuanlan.zhihu.com/p/454928730 最近在做某国产化平台相关的适配, 不管NUMA的性能和实现方式都和Intel有较大不同, 作为比较对象, 理解Intel的NUMA实现是很有必要的. 虽然从软件角度, 打开NUMA会带来额外的复杂度, 但是从硬件角度, 关

[转帖]Intel寄存器的艺术

https://www.oschina.net/translate/the-art-of-picking-intel-registers?print 我为一本名为Scene Zine的在线杂志写了这篇文章。 Scene Zine 致力于 Demo Scene,它是一个数字艺术社区,致力于通过音乐,艺

[转帖]Intel VROC: 高性能的NVMe SSD软RAID功能

https://www.modb.pro/db/586867 在前面的文章 LSI/Broadcom的Tri-Mode 里介绍过Broadcom新推出的Tri-Mode芯片已经可以支持NVMe SSD了,SAS3500 ROC(RAID On Chip)芯片还支持多块NVMe SSD的硬RAID功能

[转帖]Intel PAUSE指令变化如何影响MySQL的性能

https://zhuanlan.zhihu.com/p/581200704 导读 x86、arm指令都很多,无论是应用程序员还是数据库内核研发大多时候都不需要对这些指令深入理解,但是 Pause 指令和数据库操作太紧密了,本文通过一次非常有趣的性能优化来引入对 Pause 指令的理解,期望可以事半

[转帖]Intel、海光、鲲鹏920、飞腾2500 CPU性能对比

https://plantegg.github.io/2021/06/18/%E5%87%A0%E6%AC%BECPU%E6%80%A7%E8%83%BD%E5%AF%B9%E6%AF%94/ Intel 海光 鲲鹏920 飞腾2500 CPU性能对比 为了让程序能快点,特意了解了CPU的各种原理,