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
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |