问题标签 [avx512]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
368 浏览

intrinsics - _mm512_mask_prefetch_i32gather_ps() 会为每个元素预取整个缓存行吗?

收集预取内在函数_mm512_mask_prefetch_i32gather_ps可用于在 Knights Corner 上预取 32 位浮点数。

由于不存在对应的双精度内在函数,如何将这个内在函数用于预取 64 位或 128 位元素?

是否需要显式预取每个 4 字节块,或者我们是否可以假设每个 32 位变量的预取实际上会预取它占用的整个 64 字节缓存行?

例子:

我想在{1,2,10,12}基地址的偏移量处预取 4 个双精度0xf0000000的偏移量处预取 4 个双精度数。

这对应于 的地址{0xf0000008, 0xf0000010, 0xf0000050, 0xf0000060}

这些占用从 开始的两个缓存行{0xf0000000, 0xf0000040}

_mm512_mask_prefetch_i32gather_ps使用这两个缓存行的基地址就足够了吗?

我最初在英特尔 MIC 论坛上发布了这个问题,但没有成功。

0 投票
3 回答
6163 浏览

simd - 使用 __m512 (AVX512) 水平添加

如何在 512 位 AVX 寄存器中有效地使用浮点数执行水平加法(即将单个向量中的项目加在一起)?对于 128 位和 256 位寄存器,这可以使用 _mm_hadd_ps 和 _mm256_hadd_ps 完成,但没有 _mm512_hadd_ps。英特尔内在函数指南文档 _mm512_reduce_add_ps。它实际上并不对应于一条指令,但它的存在表明存在一种最佳方法,但它似乎没有在 GCC 最新快照附带的头文件中定义,我找不到它与谷歌。

我认为“hadd”可以用 _mm512_shuffle_ps 和 _mm512_add_ps 来模拟,或者我可以使用 _mm512_extractf32x4_ps 将一个 512 位寄存器分成四个 128 位寄存器,但我想确保我没有错过更好的东西。

0 投票
1 回答
1462 浏览

gcc - Xeon Phi Knights Corner 内部函数与 GCC

我正在考虑购买 Xeon Phi Knights Corner (KNC) 协处理器卡。但我没有英特尔编译器,也没有兴趣购买(非商业版本似乎不再是一种选择)。

看来 GCC 正在获得对 Xeon Phi 的 OpenMP 支持是否有某些版本的 GCC 或支持KNC 内在函数的 GCC 扩展?

请注意,KNC 的 512 位 SIMD 与 AVX512 不兼容(尽管下一版本的 Knights Landing 将兼容)。

0 投票
2 回答
711 浏览

x86 - 为什么 AVX512-IFMA 只支持 52 位整数?

从值我们可以推断它使用与双精度浮点硬件相同的组件。但是 double 有 53 位有效位,那么为什么 AVX512-IFMA 限制为 52 位呢?当然尾数只有 52 位,并且隐藏了一位,但它仍然对值有贡献,需要输入加法器/乘法器/除法器...

0 投票
2 回答
48099 浏览

gcc - 如何在编译时检测 SSE/SSE2/AVX/AVX2/AVX-512/AVX-128-FMA/KCVI 可用性?

我正在尝试优化一些矩阵计算,我想知道是否可以在编译时检测 SSE/SSE2/AVX/AVX2/AVX-512/AVX-128-FMA/KCVI [1]是否由编译器?非常适合 GCC 和 Clang,但我只能使用其中一个来管理。

我不确定这是否可行,也许我会使用自己的宏,但我更愿意检测它并要求用户选择它。


[1] “KCVI”代表 Knights Corner Vector Instruction 优化。FFTW 之类的库检测/利用这些更新的指令优化。

0 投票
1 回答
1650 浏览

c - AVX-512 中未定义的引用

我有一个在 Xeon Phi 上运行的 C 代码,其中包含许多 AVX-512 内在函数。

代码编译良好,直到以下几行:

编译器给出以下错误:

我的第一个问题是,为什么编译器将_mm512_cvttps_epi32and转换_mm512_cvtepi32_ps_mm512_cvtt_roundps_epi32and _mm512_cvt_roundepi32_ps

第二个问题是,为什么这些内在函数特别是未定义的?我在顶部有以下内容:

我正在使用 icc (ICC) 15.0.1 20141023

0 投票
2 回答
8128 浏览

assembly - 如何使用 SIMD 指令转置 16x16 矩阵?

我目前正在编写一些针对英特尔即将推出的支持 512 位操作的 AVX-512 SIMD 指令的代码。

现在假设有一个由 16 个 SIMD 寄存器表示的矩阵,每个寄存器包含 16 个 32 位整数(对应于一行),我如何用纯 SIMD 指令转置矩阵?

已经有分别用 SSE 和 AVX2 转置 4x4 或 8x8 矩阵的解决方案。但我不知道如何使用 AVX-512 将其扩展到 16x16。

有任何想法吗?

0 投票
2 回答
259 浏览

simd - “修复”浮动是什么意思?

我正在查看 AVX-512 中的指令集,并注意到一组fixup指令。一些例子

这里的“修复”是什么意思?

0 投票
2 回答
1616 浏览

intel - 为什么英特尔不以更兼容或更通用的方式设计其 SIMD ISA?

英特尔在 Xeon Phi 上有多个 SIMD ISA,例如 SSE、AVX、AVX2、AVX-512 和 IMCI。这些 ISA 在不同的处理器上受支持。例如,AVX-512 BW、AVX-512 DQ 和 AVX-512 VL 仅在 Skylake 上受支持,而在 Xeon Phi 上不支持。Skylake 和 Xeon Phi 均支持 AVX-512F、AVX-512 CDI、AVX-512 ERI 和 AVX-512 PFI。

为什么英特尔不设计一种更通用的 SIMD ISA,可以在其所有高级处理器上运行?

此外,英特尔在开发 ISA 时删除了一些内在函数并添加了新的。很多内在函数有很多风格。例如,有些工作在压缩的 8 位上,而有些工作在压缩的 64 位上。有些口味没有得到广泛支持。例如,至强融核将无法处理压缩的 8 位值。然而,Skylake 将拥有这个。

为什么英特尔会以如此不一致的方式更改其 SIMD 内在函数?

如果 SIMD ISA 彼此更兼容,则现有的 AVX 代码可以更轻松地移植到 AVX-512。

0 投票
2 回答
1193 浏览

assembly - 如何将 AVX512 寄存器 zmm26 中的 QuadWord 写入 rax 寄存器?

我希望对 zmm 0-31 寄存器集的四字元素执行整数算术运算,并保留这些运算产生的进位位。看来只有在通用寄存器集中处理数据时才有可能。

因此,我想将信息从 zmm 0-31 寄存器之一复制到通用寄存器之一。在处理通用寄存器中的 64 位数据后,我想将数据返回到原始 zmm 0-31 寄存器,位于它来自的同一个 QuadWord 位置。我知道我可以使用命令将数据从通用寄存器 rax 移动到 AVX512 寄存器 zmm26 QuadWord 位置 5

其中 8 位掩码 k5 = 十进制 32,允许将数据广播到 zmm26 的第 5 个 QuadWord,z=1 表示 zmm26 中没有其他 QWord 受到影响,而 rax 是数据的来源。

但我找不到将数据从寄存器 zmm26,四字 5 写入 rax 寄存器的反向命令。看来我只能使用 vmovq rax, xmm1 命令将最不重要的 QuadWord 从 AVX 寄存器复制到通用寄存器。并且没有使用屏蔽 zmm 0-31 源的广播命令。

我会很高兴知道我的命令选项是什么,以便将特定的 QuadWord 从 zmm 0-31 寄存器获取到 rax 寄存器。此外,目前除了英特尔手册之外,还有其他关于 AVX512 指令集的描述性信息来源吗?