avx sse系列介绍

SSE(Streaming SIMD Extensions)家族是由英特尔引入的一组指令集扩展,用于提高多媒体、科学计算和其他领域的处理性能。SSE家族随着时间的发展,增加了多个版本和子集。以下是SSE家族的主要分类:

  1. SSE (SSE1):

    • 引入时间:1999年,随Pentium III处理器发布。
    • 特点:增加了70条新指令,主要用于加速浮点运算和多媒体任务。
  2. SSE2:

    • 引入时间:2001年,随Pentium 4处理器发布。
    • 特点:扩展了SSE1指令集,包括144条新指令,支持双精度浮点运算和整数运算。
  3. SSE3:

    • 引入时间:2004年,随Prescott内核的Pentium 4处理器发布。
    • 特点:增加了13条新指令,优化了线程同步和浮点数水平加法等操作。
  4. SSSE3 (Supplemental SSE3):

    • 引入时间:2006年,随Intel Core 2处理器发布。
    • 特点:增加了16条新指令,进一步优化了多媒体处理和加密计算。
  5. SSE4:

    • SSE4.1:
      • 引入时间:2007年,随Penryn内核的处理器发布。
      • 特点:增加了47条新指令,支持文本处理和视频编解码等任务。
    • SSE4.2:
      • 引入时间:2008年,随Nehalem内核的处理器发布。
      • 特点:增加了7条新指令,进一步优化了字符串和文本处理。
  6. SSE4a:

    • 引入时间:2007年,随AMD K10处理器(如Phenom)发布。
    • 特点:包含4条新指令,用于加速某些特定的计算任务。需要注意的是,SSE4a是由AMD引入的,而不是英特尔。
  7. AES-NI (Advanced Encryption Standard New Instructions):

    • 引入时间:2010年,随Westmere内核的处理器发布。
    • 特点:虽然不完全属于SSE家族,但常与SSE相关联。AES-NI包含一组指令,用于优化AES加密算法的处理性能。

总的来说,SSE家族通过逐步增加新指令和优化现有指令,显著提高了处理器在多媒体、科学计算、加密等领域的性能。这些改进使得SSE成为了现代处理器中不可或缺的一部分。

AVX(Advanced Vector Extensions)家族是英特尔和AMD处理器中用于提高浮点和整数运算性能的一组指令集扩展。AVX家族包含多个版本和子集,每个版本都在前一版本的基础上增加了新的功能和优化。以下是AVX家族的主要分类:

  1. AVX (AVX1):

    • 引入时间:2011年,随英特尔Sandy Bridge处理器发布。
    • 特点:扩展了128位的SSE指令集到256位,支持更高效的浮点和整数运算。
  2. AVX2:

    • 引入时间:2013年,随英特尔Haswell处理器发布。
    • 特点:增加了对整数操作的支持,扩展了FMA(Fused Multiply-Add)指令,进一步提高了数据处理能力。
  3. AVX-512:

    • 引入时间:2016年,随英特尔Xeon Phi处理器和Skylake-X系列处理器发布。
    • 特点:扩展到512位宽度,提供更高的并行处理能力和更丰富的指令集。AVX-512包含多个子集,例如AVX-512F(基础指令)、AVX-512CD(冲突检测)、AVX-512ER(指数和倒数计算)、AVX-512PF(预取指令)等。
  4. AVX-512子集:

    • AVX-512 Foundation (AVX-512F): 基础指令集,包含了最基本的512位宽向量操作指令。
    • AVX-512 Conflict Detection Instructions (AVX-512CD): 提供冲突检测指令,主要用于优化并行算法。
    • AVX-512 Exponential and Reciprocal Instructions (AVX-512ER): 包括指数和倒数计算的专用指令,主要用于科学计算和金融应用。
    • AVX-512 Prefetch Instructions (AVX-512PF): 包含预取指令,用于加速内存访问。
    • AVX-512 Byte and Word Instructions (AVX-512BW): 扩展了字节和字的操作,增加了对更小数据类型的支持。
    • AVX-512 Vector Length Extensions (AVX-512VL): 允许使用128位和256位的向量操作,这使得它可以与AVX和AVX2指令集兼容。
    • AVX-512 Doubleword and Quadword Instructions (AVX-512DQ): 扩展了对双字和四字操作的支持。
    • AVX-512 Vector Bit Manipulation Instructions (AVX-512VBMI): 提供了向量比特操作的指令,主要用于数据压缩和加密。
    • AVX-512 Vector Bit Manipulation Instructions 2 (AVX-512VBMI2): 这是AVX-512VBMI的扩展版本,增加了更多的比特操作指令。
    • AVX-512 Population Count (AVX-512VPOPCNTDQ): 包含了向量人口计数指令,用于计算向量内每个元素的二进制1的数量。
    • AVX-512 Neural Network Instructions (AVX-512NNI): 优化了神经网络相关的计算。
    • AVX-512 Neural Network Instructions 2 (AVX-512NNI2): 扩展了神经网络指令集,以支持更多的神经网络操作。
    • AVX-512 Bit Algorithms (AVX-512BITALG): 包括了一些新的比特操作算法指令。
    • AVX-512 GFNI (AVX-512 GFNI): 包含了基于有限域的指令,主要用于加密计算。
    • AVX-512 VP2INTERSECT (AVX-512 VP2INTERSECT): 提供了新的交集指令。
  5. AVX-512 BFloat16 (AVX512_BF16):

    • 引入时间:2020年,随英特尔Cooper Lake处理器发布。
    • 特点:支持BFloat16格式的浮点运算,用于提高机器学习和人工智能任务的性能。
  6. AVX-512 VPCLMULQDQ (AVX-512 VPCLMULQDQ):

    • 特点:提供了矢量化的PCLMULQDQ指令,用于加速加密算法中的乘法操作。
  7. AVX-512 IFMA (AVX-512 IFMA):

    • 特点:提供了整数FMA(Fused Multiply-Add)指令,主要用于加密和大整数运算。

AVX家族通过不断扩展和优化,显著提高了处理器在科学计算、机器学习、多媒体处理和加密等领域的性能。这些改进使得AVX成为了现代高性能计算不可或缺的一部分。
AMX(Advanced Matrix Extensions)是英特尔(Intel)引入的一组指令集扩展,旨在加速矩阵计算,特别是用于人工智能(AI)和机器学习(ML)工作负载。AMX指令集是英特尔的高级矢量扩展(AVX)系列的一部分,进一步增强了处理单元对复杂矩阵操作的效率。

以下是一些关于AMX指令集的关键点:

矩阵计算加速:
AMX专门用于加速矩阵乘法和其他相关操作,这些操作在深度学习和其他AI算法中非常常见。

Tile-Based Architecture:
AMX引入了一种称为“tiles”的新型寄存器结构,这些寄存器用来存储矩阵数据。每个tile寄存器可以存储一个固定大小的矩阵块,从而可以高效地进行大规模矩阵计算。

// mul
        template <class A, class T, class = typename std::enable_if<std::is_integral<T>::value, void>::type>
        inline batch<T, A> mul(batch<T, A> const& self, batch<T, A> const& other, requires_arch<avx512bw>) noexcept
        {
            if constexpr(sizeof(T) == 1)
            {
                __m512i upper = _mm512_and_si512(_mm512_mullo_epi16(self, other), _mm512_srli_epi16(_mm512_set1_epi16(-1), 8));
                __m512i lower = _mm512_slli_epi16(_mm512_mullo_epi16(_mm512_srli_epi16(self, 8), _mm512_srli_epi16(other, 8)), 8);
                return _mm512_or_si512(upper, lower);
            }
            else if constexpr(sizeof(T) == 2)
            {
                return _mm512_mullo_epi16(self, other);
            }
            else
            {
                return mul(self, other, avx512dq {});
            }
        }

参考

  • 9
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值