CPU指令集——AVX2

CPU指令集——AVX21.查看CPU所支持的指令集借助CPU-Z工具,可查看当前CPU所支持的指令集:由此可知,Inteli7-7700CPU支持AVX2指令集,但是不支持AVX-512指令集。根据https://medium.com/@hdevalence/even-faster-edwards-curves-with-ifma-8b1e576a00e9可知,其基于AVX512-IFMA的实现是AVX2速…

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

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=AB+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.net/139349.html原文链接:https://javaforall.net

(3)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Laravel响应和视图

    Laravel响应和视图

    2021年9月8日
    49
  • 什么是 Hook 技术

    什么是 Hook 技术一、什么是Hook技术  Hook技术又叫做钩子函数,在系统没有调用该函数之前,钩子程序就先捕获该消息,钩子函数先得到控制权,这时钩子函数既可以加工处理(改变)该函数的执行行为,还可以强制结束消息的传递。简单来说,就是把系统的程序拉出来变成我们自己执行代码片段。  要实现钩子函数,有两个步骤:  1.利用系统内部提供的接口,通过实现该接口,然后注入进系统(特定场景下使用)  2.动态代理(使用所有场景)二、Hook技术实现的步骤  Hook技术实现的步骤也分为两步  1.找到ho

    2022年5月13日
    39
  • listnode.val java(string indexof方法)

    ListNode是由自己定义的java中的链表对象类结构如下publicclassListNode{intval;ListNodenext;publicListNode(intx){val=x;}}初始化时必须传值有一列1.给出Input:(2->4->3)+(5->6->4)要求Output:7->0->…

    2022年4月17日
    62
  • visitor设计模式ppt_常用的设计模式

    visitor设计模式ppt_常用的设计模式动机Visitor是访问者的意思。数据结构中保存着元素。一般我们需要对元素进行处理,那么处理元素的代码放在哪里呢?最显然的方法就是放在数据结构的类中,在类中添加处理的方法。但是如果有很多处理,就比较麻烦了,每当增加一种处理,我们就不得不去修改表示数据结构的类。visitor模式就是用来解决这个问题的,visitor模式将数据结构的定义和处理分离开。也就是会新增一个访问者的类,将数据元素的处理交给访问者类,这样以后要新增处理的时候,只需要新增访问者就可以了。模式定义将更新(变更)封装到一个类中(访问

    2022年8月8日
    3
  • QGIS使用入门

    QGIS使用入门最近工作需要,要做一些关于QGIS的地图验证工作,这里就记录一下我的学习步骤和问题。1:首先下载QGIShttps://qgis.org/en/site/forusers/download.html我这里使用的是3.4版本的2:安装完毕后会生成好几个快捷方式,我们使用的是3:打开后整体界面4:添加在线地图高德地址:https://webst01.i…

    2022年6月15日
    80
  • python中lb_python pdfminer

    python中lb_python pdfminer1.准备LMDB和SQLite/MySQL等关系型数据库不同,属于key-value数据库(把LMDB想成dict会比较容易理解),键key与值value都是字符串。安装:pipinstalllmdb使用时importlmdb。2.操作流程概况地讲,操作LMDB的流程是:通过env=lmdb.open()打开环境通过txn=env.begin()建立事务通过txn.put(k

    2022年9月29日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号