ein*_*ica 8 galois-field avx512
AVX-512 指令集扩展之一是AVX-512 + GFNI,“伽罗华域新指令”。
伽罗瓦理论是关于域扩展的。这与处理矢量化整数或浮点值有什么关系?指令应该执行“Galois 域仿射变换”,它的逆,以及“Galois 域乘以字节”。
那些是什么领域?这些说明实际上做了什么,它有什么用?
我认为主要用例之一是SW RAID6 奇偶校验,包括在每次写入时生成新的奇偶校验。(不仅仅是在恢复/重建期间)。RAID5 可以对其每个条带的唯一奇偶校验成员使用简单的 XOR 奇偶校验,但 RAID6 需要两个不同的奇偶校验,可以从 N+2 数据块+奇偶校验中的任意 N 个数据块中恢复 N 数据块。这是前向纠错,与 ECC 解决的问题类似。
\n伽罗瓦域对此很有用;例如,它们是广泛使用的里德所罗门码的基础。例如,Par2使用 16 位伽罗瓦域来允许非常大的块计数,从而为大文件或文件集生成相对细粒度的错误恢复数据。(最多 64k 块)。
\n不幸的是,GFNI 对于 PAR2 来说并不是很好,因为 GFNI 仅支持 GF2P8 GF(2 8 ),而不支持 par2 使用的 GF(2 16 )。 http://lab.jerasure.org/jerasure/gf-complete/issues/14表示可以使用GF2P8AFFINEQB来实现更宽的字长,因此可以用它来加速 PAR2。
\n但它对于 RAID6 应该很有用,包括在写入时生成新的奇偶校验,这对 CPU 来说是相当密集的。Linux 内核的md
驱动程序已经包含使用 SSE2 或 AVX2 的内联汇编,这是kernel_fpu_begin()
和的少数用途之一kernel_fpu_end()
。(2013 年的一篇论文着眼于使用 Intel SIMD 优化 GF 编码,提到了 Linux 的md
RAID 和 GF-Complete,这是之前链接的项目。当前的技术水平类似于两个pshufb
字节混洗来实现 4 位表查找; GFNI 可以将其减少到 1 条指令,特别是如果gf2p8mulb
使用硬编码的 GF 多项式。)
(RAID6 使用奇偶校验的方式与 par2 不同,它为磁盘上的每个条带“垂直”生成单独的奇偶校验,而不是为一大组数据“水平”生成。底层数学原理相似。)
\n英特尔很可能计划在未来的一些 Silvermont 系列 Atom 上支持 GFNI,因为指令有传统的 SSE 编码,没有 3 操作数 VEX 或 EVEX。 许多其他新指令仅使用 VEX 编码引入,包括一些 BMI1/BMI2 标量整数指令。
\nSilvermont 系列(Airmont、Goldmont、Tremont 等)在 NAS 设备中得到了一些应用,其中大部分 CPU 需求可能来自 RAID6。带有 GFNI 的未来版本可以节省功耗,或者在不提高时钟速度的情况下避免瓶颈。
\nAVX + GFNI 意味着支持 YMM 版本(即使没有 AVX2),AVX512F + GFNI 意味着 ZMM 版本。( felixcloutier.com 上的HTML 摘录奇怪地只提到了非 VEX 128 位编码,同时还列出了_mm_maskz_gf2p8affine_epi64_epi8
内部函数(屏蔽需要 EVEX) 。HJLebbink 的 HTML 摘录确实包含 VEX 和 EVEX 形式。也许它们只出现在 Intel 中HJ 删掉了“未来扩展”手册,但 Felix 没有。)
使用 512 位向量确实会在短时间内限制 Turbo 时钟速度(在 Skylake-Xeon 上),因此内核可能不希望这样做。但在某些情况下,如果不受内存限制,它可以显着减少 CPU 开销。
\n“场”是一个数学概念:
\n\n\n(维基百科) 在数学中,域是定义加法、减法、乘法和除法的集合,其行为与有理数和实数的相应运算相同。
\n...
\n包括所有元素 a 存在加法逆元 \xe2\x88\x92a,以及每个非零元素 b存在乘法逆元 b \xe2\x88\x921
\n
伽罗瓦域是有限域的一种,具有以下性质:GF8 数中的位表示 8 次多项式的 0 或 1 个系数。(很可能我完全破坏了这一点,但它是类似的东西而不是位值。) 这就是为什么无进位加法(又名 XOR)和无进位乘法(使用 shift/XOR 而不是 shift/ add) 在伽罗瓦域上很有用)
\ngf2p8mulb
\ 的内置多项式 x^8 + x^4 + x^3 + x + 1 与 AES (Rijndael) 中使用的多项式相匹配;这更加支持@nwellnhof 的假设,即英特尔只是将其包含在内,因为硬件就在那里。
如果它也用于任何其他常见应用程序,它可能会为我们提供这些指令的“预期”用例的线索。
\nVAES 扩展提供了AESENC版本以及 YMM 和 ZMM 向量的相关指令,而 AES-NI + AVX2 仅提供 128 位向量。因此,英特尔显然正在将 AES 硬件扩展到 512 位 SIMD 向量。我不知道这是否会激发广泛的 GFNI,反之亦然,或者两者兼而有之。(宽 GFNI 意义重大;如果限制为 128 位,则使用优化的 AVX512 实现vpshufb
查找表的优化 AVX512 实现将击败它。)
这些指令与 AES (Rijndael) 分组密码密切相关。使用用户定义的仿射变换GF2P8AFFINEINVQB
执行Rijndael S-Box替换。
GF2P8AFFINEQB
本质上是 GF(2) 中 8x8 位矩阵与 8 位向量的(无进位)乘法,因此它在其他面向位的算法中应该很有用。它还可用于在 GF(2 8 ) 的同构表示之间进行转换。
GF2P8MULB
将GF(2 8 ) 的两个(向量)元素相乘,实际上是多项式表示中的 8 位数字与 Rijndael 归约多项式。此操作用于Rijndael 的 MixColumns 步骤。
请注意,有限域中的乘法仅与整数乘法松散相关。
归档时间: |
|
查看次数: |
1633 次 |
最近记录: |