前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CPU指令集——AVX2

CPU指令集——AVX2

作者头像
全栈程序员站长
发布2022-08-23 19:11:53
13K0
发布2022-08-23 19:11:53
举报

大家好,又见面了,我是你们的朋友全栈君。

1.查看CPU所支持的指令集

  • 对于windows系统,可借助CPU-Z工具,可查看当前CPU所支持的指令集:
在这里插入图片描述
在这里插入图片描述
  • 对于Linux系统,可运行cat /proc/cpuinfo | grep flags来查看当前CPU所支持的指令集:
在这里插入图片描述
在这里插入图片描述

由此可知,Intel i7-7700CPU支持AVX2指令集,但是不支持AVX-512指令集。 AVX512-IFMA为Intel AVX512指令集的一个extension扩展集,主要用于加速整数运算。 根据https://medium.com/@hdevalence/even-faster-edwards-curves-with-ifma-8b1e576a00e9 可知,其基于AVX512-IFMA的实现是AVX2速度的1.5倍。

目前支持AVX512-IFMA指令集的CPU主要有Cannon Lake(如Intel® Core™ i3-8121U Processor)和Ice Lake系列处理器:

在这里插入图片描述
在这里插入图片描述

2. SIMD

SIMD的全称为:Single Instruction stream Multiple Data streams,对应的中文名为:单指令流多数据流。 SIMD为并行计算中的一种。 计算机架构Flynn分类法(1966年提出),根据指令流和数据流的并发数量分为:

  • Single instruction stream single data stream(SISD),典型的串行机。
  • Single instruction stream multiple data streams(SIMD),即单一指令可同时操作多个不同的数据流。指令可以pipeline方式顺序执行,也可通过多个功能单元并行执行。
  • Multiple instruction streams single data stream(MISD),多条指令对应一个数据流。该架构除用于容错场景外(如多个系统同时操作相同的数据流,必须达成相同的结果),不常用。
  • Multiple instruction streams multiple data streams(MIMD),多个自治处理器同时对不同的数据执行不同的指令。MIMD包括多核超标量处理器和分布式系统。

3. AVX

AVX为在CPU处理器上实现SIMD操作的指令集。主要衍化流程为:

  • AVX,全称为:Advanced Vector Extensions(又名,Sandy Bridge New Extensions),是Intel和AMD微服务器x86指令集的extension扩展。
  • AVX2扩充到了支持256bit的整数运算指令,引入了Fused-Multiply-Add(FMA)运算。所谓FMA,即可通过单一指令实现 A = A ∗ B + C A=A*B+C A=A∗B+C计算。
  • AVX-512通过使用新的EVEX prefix编码方式,将AVX扩充到了支持512-bit运算。

Intel AVX introduces support for 256-bit wide SIMD registers (YMM0-YMM7 in operating modes that are 32-bit or less, YMM0-YMM15 in 64-bit mode). The lower 128-bits of the YMM registers are aliased to the respective 128-bit XMM registers. AVX硬件由16个256bitYMM寄存器(YMM0~YMM15)和1个32-bit control/status控制/状态MXCSR寄存器组成。其中YMM寄存器的低128位与Intel SSE指令集的128-BIT XMM寄存器复用。

在这里插入图片描述
在这里插入图片描述

AVX指令集遵循IEEE-754规范,其中的32-bit浮点数为单精度浮点数(float),64-bit浮点数为双精度浮点数(double)。因为AVX中的YMM寄存器为256-bit,所以若存储单精度浮点数32-bit,可存储8个,若存储双精度浮点数64-bit,可存储4个。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

尽管VGX并不要求内存对齐,但是内存对齐有助于提升性能。如对于128-bit访问的16字节对齐和对于256-bit访问的32字节对齐。

MXCSR寄存器的0~5位除非使用LDMXCSRFXRSTOR命令清理,否则将保持不变,分别代表无效的操作:denormal、除0、overflow、underflow和精度。

4. AVX2指令集

根据《Intel® Advanced Vector Extensions Programming Reference.pdf》有:

  • 1) PMULUDQ – Multiply Packed Unsigned Doubleword Integers
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
  • 2)vpunpckldq- Unpack Low Data
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
  • 3)vpunpckhdq- Unpack High Data
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
  • 4)VPSHUFD- Shuffle Packed Doublewords
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
  • 5)VPBLENDD – Blend Packed Dwords
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
  • 6)VPERMD – Full Doublewords Element Permutation
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
  • 7)VPSRLVD——Variable Bit Shift Right Logical
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

参考资料: [1] https://www.cpuid.com/softwares/cpu-z.html [2] https://medium.com/@hdevalence/even-faster-edwards-curves-with-ifma-8b1e576a00e9 [3] https://en.wikipedia.org/wiki/AVX-512 [4] https://en.wikipedia.org/wiki/Advanced_Vector_Extensions [5] https://software.intel.com/en-us/articles/introduction-to-intel-advanced-vector-extensions [6] https://en.wikipedia.org/wiki/SIMD [7] 《Intel® Advanced Vector Extensions Programming Reference.pdf》

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/139349.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年5月7,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.查看CPU所支持的指令集
  • 2. SIMD
  • 3. AVX
  • 4. AVX2指令集
相关产品与服务
GPU 云服务器
GPU 云服务器(Cloud GPU Service,GPU)是提供 GPU 算力的弹性计算服务,具有超强的并行计算能力,作为 IaaS 层的尖兵利器,服务于深度学习训练、科学计算、图形图像处理、视频编解码等场景。腾讯云随时提供触手可得的算力,有效缓解您的计算压力,提升业务效率与竞争力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档