SSE(Streaming SIMD Extensions)家族是由英特尔引入的一组指令集扩展,用于提高多媒体、科学计算和其他领域的处理性能。SSE家族随着时间的发展,增加了多个版本和子集。以下是SSE家族的主要分类:
- SSE (SSE1):- 引入时间:1999年,随Pentium III处理器发布。- 特点:增加了70条新指令,主要用于加速浮点运算和多媒体任务。
- SSE2:- 引入时间:2001年,随Pentium 4处理器发布。- 特点:扩展了SSE1指令集,包括144条新指令,支持双精度浮点运算和整数运算。
- SSE3:- 引入时间:2004年,随Prescott内核的Pentium 4处理器发布。- 特点:增加了13条新指令,优化了线程同步和浮点数水平加法等操作。
- SSSE3 (Supplemental SSE3):- 引入时间:2006年,随Intel Core 2处理器发布。- 特点:增加了16条新指令,进一步优化了多媒体处理和加密计算。
- SSE4:- SSE4.1: - 引入时间:2007年,随Penryn内核的处理器发布。- 特点:增加了47条新指令,支持文本处理和视频编解码等任务。- SSE4.2: - 引入时间:2008年,随Nehalem内核的处理器发布。- 特点:增加了7条新指令,进一步优化了字符串和文本处理。
- SSE4a:- 引入时间:2007年,随AMD K10处理器(如Phenom)发布。- 特点:包含4条新指令,用于加速某些特定的计算任务。需要注意的是,SSE4a是由AMD引入的,而不是英特尔。
- AES-NI (Advanced Encryption Standard New Instructions):- 引入时间:2010年,随Westmere内核的处理器发布。- 特点:虽然不完全属于SSE家族,但常与SSE相关联。AES-NI包含一组指令,用于优化AES加密算法的处理性能。
总的来说,SSE家族通过逐步增加新指令和优化现有指令,显著提高了处理器在多媒体、科学计算、加密等领域的性能。这些改进使得SSE成为了现代处理器中不可或缺的一部分。
AVX(Advanced Vector Extensions)家族是英特尔和AMD处理器中用于提高浮点和整数运算性能的一组指令集扩展。AVX家族包含多个版本和子集,每个版本都在前一版本的基础上增加了新的功能和优化。以下是AVX家族的主要分类:
- AVX (AVX1):- 引入时间:2011年,随英特尔Sandy Bridge处理器发布。- 特点:扩展了128位的SSE指令集到256位,支持更高效的浮点和整数运算。
- AVX2:- 引入时间:2013年,随英特尔Haswell处理器发布。- 特点:增加了对整数操作的支持,扩展了FMA(Fused Multiply-Add)指令,进一步提高了数据处理能力。
- AVX-512:- 引入时间:2016年,随英特尔Xeon Phi处理器和Skylake-X系列处理器发布。- 特点:扩展到512位宽度,提供更高的并行处理能力和更丰富的指令集。AVX-512包含多个子集,例如AVX-512F(基础指令)、AVX-512CD(冲突检测)、AVX-512ER(指数和倒数计算)、AVX-512PF(预取指令)等。
- 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): 提供了新的交集指令。
- AVX-512 BFloat16 (AVX512_BF16):- 引入时间:2020年,随英特尔Cooper Lake处理器发布。- 特点:支持BFloat16格式的浮点运算,用于提高机器学习和人工智能任务的性能。
- AVX-512 VPCLMULQDQ (AVX-512 VPCLMULQDQ):- 特点:提供了矢量化的PCLMULQDQ指令,用于加速加密算法中的乘法操作。
- 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 {});
}
}
参考
- turbo/simd
- intrinsics-guide
版权归原作者 DmrForever 所有, 如有侵权,请联系我们删除。