问题标签 [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 投票
2 回答
2553 浏览

c++ - 错误:“_mm512_loadu_epi64”未在此范围内声明

我正在尝试为此问题报告创建一个最小的复制器。AVX-512 似乎存在一些问题,它在配备 Skylake 处理器的最新 Apple 机器上发货。

根据GCC6 发布说明,应该可以使用 AVX-512 设备。根据Intel Intrinsics Guide vmovdqu64可用于AVX-512VLAVX-512F

接着:

我把选项带回去了,-msse2但没有成功。我似乎错过了什么。

为现代 GCC 使用 AVX-512 需要什么?


根据 a /opt/local/bin/g++-mp-6 -v,这些是标头搜索路径:

接着:

0 投票
3 回答
6015 浏览

assembly - How to convert a binary integer number to a hex string?

Given a number in a register (a binary integer), how to convert it to a string of hexadecimal ASCII digits? (i.e. serialize it into a text format.)

Digits can be stored in memory or printed on the fly, but storing in memory and printing all at once is usually more efficient. (You can modify a loop that stores to instead print one at a time.)

Can we efficiently handle all the nibbles in parallel with SIMD? (SSE2 or later?)

0 投票
1 回答
166 浏览

c++ - _mm512_i64gather_pd() 的内存访问错误

我正在尝试使用一个非常简单的 AVX-512 收集指令示例:

不幸的是,我最后一次调用_mm512_i64gather_pd导致内存访问错误(内存转储)。

德语错误信息:Speicherzugriffsfehler (Speicherabzug geschrieben)

我正在使用英特尔至强融核 (KNL) 7210。

编辑:这里的错误是,我使用 32 位整数和 64 位加载指令,并且缩放必须_mm512_i64gather_pd是 8 或sizeof(double).

0 投票
1 回答
1248 浏览

x86 - _mm512_load_epi32 和 _mm512_load_si512 有什么区别?

英特尔内在函数指南简单地说_mm512_load_epi32

将 [s] 512 位(由 16 个压缩的 32 位整数组成)从内存加载到 dst

_mm512_load_si512

将 [s] 512 位整数数据从内存加载到 dst

这两者有什么区别?文档不清楚。

0 投票
0 回答
37 浏览

x86-64 - 如何将 rax 寄存器写入 AVX512 寄存器 zmm26 的四字元素?

这个问题与如何将 QuadWord 从 AVX512 寄存器 zmm26 写入 rax 寄存器相反?. 另外我有不去内存进行中间存储的要求。那可能吗?我希望能够单独编写 zmm15-zmm31 的每个四字元素。

0 投票
1 回答
920 浏览

c++ - SIMD:实现 _mm256_max_epu64_ 和 _mm256_min_epu64_

我想问一个关于 SIMD 的问题。我的 CPU 中没有AVX512,但想要一个_mm256_max_epu64

我们如何实现这个功能AVX2呢?

在这里,我尝试拥有我的琐碎。也许我们可以让它成为一个讨论并改进它。


编辑作为摘要:

我们讨论了__mm256 无符号比较。我在上面给出了我的简单实现,只是遵循了非常基本的概念:single__m256i相当于 4uint64_t或 4 float,它们也一起构成 256 位。

然后我们从@chtz 那里得到了答案,AVXAVX.

最后事实证明,这两个实现导致了相同的程序集,这要归功于CLang. 来自编译器资源管理器的汇编示例


另一个_mm256_min_epu64_补充说。它只是反映_mm256_max_epu64_上述情况。使其更容易被搜索以备将来使用。

0 投票
1 回答
1304 浏览

x86 - 当使用带有 AVX-512 加载和存储的屏蔽寄存器时,是否会因对屏蔽元素的无效访问而引发故障?

当我执行 writemasked AVX-512 存储时,如下所示:

如果访问的内存的某些部分[rsi, rsi + 63]未映射但所有这些位置的写掩码为零(即,由于掩码而实际上未修改数据),则指令会出错。

另一种询问方式是,这些 AVX-512 屏蔽存储是否具有与vmaskmovAVX 中引入的类似的故障抑制能力。

0 投票
1 回答
681 浏览

visual-studio - AVX512 和 MSVC 预处理器符号

根据此链接,AVX512( MSVC 2017)没有预定义的预处理器符号

我正在尝试构建在(你猜对了)窗口上使用特征库的thundersvm。Eigen 和 Thundersvm 都使用 cmake 并取决于编译器前处理器符号,Eigen 是否使用 avx512 指令编译。

似乎 using/arch:AVX512不会触发 MSVC 中的任何错误,但没有定义__AVX512F__Eigen 需要的符号。我也尝试包含-D__AVX512F__=ON在 cmake 参数中,但仍然没有运气。

由于 AVX512 没有预定义的预处理器符号,有没有办法强制 Eigen 用 avx512 编译?


更新

根据 chtz 的评论,我检查了 Eigen 的默认分支,并使用 arch:AVX512 重新编译了thundersvm,并使用了这个 cmake 参数(可能并非全部都需要):

-mix比较补丁前后英特尔 SDE 工具的指令组合,我可以清楚地看到使用了 AVX 指令(SDE 抱怨它vbroadcastss zmm0, xmm0在为 skl cpu 运行时无法识别指令,但在 skx 上工作正常)。问题是 MSVC 使用 AVX 的标量版本并且运行时没有改进(总指令数也是相同的),类似于这篇文章

我需要定义其他标志以便 MSVC 生成非标量指令吗?(我想我也会试试 gcc)

0 投票
2 回答
508 浏览

x86 - 使用 AVX512 生成掩码的 BMI

我受到此链接 https://www.sigarch.org/simd-instructions-considered-harmful/的启发,研究了 AVX512 的性能。我的想法是循环之后的清理循环可以使用 AVX512 掩码操作删除。

这是我正在使用的代码

我认为使用 BMI1 和/或 BMI2 指令可以生成指令更少的掩码。然而,

(在指令数量上)并不比

请参阅https://godbolt.org/z/BFQCM3https://godbolt.org/z/tesmB_

这似乎是因为 _bextr_u32 无论如何都会移动 8 位。

可以使用更少的指令(例如使用 BMI 或其他方法)或更优化地生成掩码吗?


我用我的 AVX512 结果扩充了链接中的表格。

我认为,如果链接的作者从-nup to0而不是 from 0to计数,n他们可能会cmp像我在主循环中那样跳过指令(参见下面的程序集),所以对于 AVX,它应该是主循环中的 5 条指令。

这是ICC19的程序集和-O3 -xCOMMON-AVX512

在哪里

宏操作应该融合到一条指令。但是,正如 Peter Cordes在此答案 中指出的js cannot fuse。编译器本可以生成jl,而不是融合。


我使用 Agner Fog 的testp实用程序来获取核心时钟(不是参考时钟)、指令、微指令。我为 SSE2(实际上是带有 FMA 但带有 128 位向量的 AVX2)、AVX2 和 AVX512 执行了此操作,用于三种不同的循环变体

请注意,核心时钟实际上并不是循环版本的函数。它仅取决于循环的迭代。它与 成正比2*n/vec_size

指令的数量确实从 v1 变为 v2,但在 v2 和 v3 之间没有变化。6*n/vec_size对于 v1,它与 v2 和 v3成正比5*n/vec_size

最后,v1 和 v2 的微指令数量或多或少相同,但 v3 的微指令数量有所下降。7*n/vec_size对于 v1 和 v2 它与 v3成正比6*n/vec_size


这是 IACA3 对于 vec_size=2 的结果

IACA 声称js宏融合add不同意 Agner 和testp实用程序的性能计数器。见上文,v27*n/vec_size与 v3 成正比6*n/vec_size,我推断这意味着js不会进行宏融合。

我认为除了指令数量之外,链接的作者还应该考虑核心周期,也许还有微指令。

0 投票
2 回答
866 浏览

scala - 使用带有火花的英特尔 AVX

我们有一个带有英特尔 AVX 512 CPU 的新集群。我们对该主题进行了研究,但没有结果。我们想知道 spark 作业是否能够在本地运行 AVX 以对 DataFrames 对象进行处理,或者我们是否必须更改代码以允许 JVM 使用它,或者它是否完全没用。我们的 spark 应用程序是用 scala 编写的。我们的大部分工作是 DataFrames 对象处理和算法。在此先感谢您的帮助