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

assembly - 混合 EVEX 和 VEX 编码方案的惩罚是什么?

混合 VEX 编码指令和非 VEX 指令是一个已知问题,程序员必须意识到这一点。

有一些这样的问题和答案。解决方案取决于您的编程方式(通常您应该zeroupper在转换后使用。但我的问题是关于 EVEX 编码方案。就没有内在函数而言,_mm512_zeroupper()使用 VEX 编码和 EVEX- 时似乎没有惩罚一起编码的指令。然而 EVEX 是 4 字节,VEX 是 3 字节,向量长度分别是 512 位和 256 位。

因为 AVX-512 不可用(至少对我来说)。我想问当我们想要混合它们时是否有什么需要注意的。

0 投票
1 回答
211 浏览

avx512 - 新 Skylake-X(Core i9、79xxX/XE)CPU 支持 AVX-512 扩展

AVX-512 标准包含许多扩展,只有一个(AVX-512F)是强制性的。新的 Skylake-X(Core i9、79xxX/XE)CPU 究竟支持什么?关于 AVX 的 Wikipedia 页面有关于 Skylake Xeon CPU (E5-26xx V5) 的详细信息,但没有关于 i9 的详细信息。谷歌也不是很有帮助。我还尝试为此 CPU 搜索 /proc/cpuinfo 的一些转储,但没有运气。

0 投票
0 回答
67 浏览

c++ - 如何生成 KSHIFTRW(右移掩码寄存器)

我有一个 __mmask64 掩码寄存器,我需要将它分成 4 个 __mmask16 掩码寄存器。

我(错误地)假设以下代码行可以解决问题:

但我得到(英特尔 c++ 编译器 18.0):

由于英特尔内部指南没有类似 _mm512_kshift(k, imm8) 的内容,例如 _mm512_kand 的定义只是:

#define _mm512_kand(k1, k2) ((__mmask16) ((k1) & (k2)))

我认为换档会给我一个KSHIFTRW

问题:如何使用 C++ 生成 KSHIFTRW。

编辑:我刚刚找到了一个相关的问题,答案很充分:Missing AVX-512 intrinsics for mask?

0 投票
0 回答
315 浏览

assembly - 我什么时候可以调用 xsaves 和 xsaves64?

什么时候可以调用xsavesand xsaves64

使用英特尔软件开发模拟器(8.12.0-2017-10-23),我可以毫无问题地xsaves64 + xrstors64从用户空间使用,但尝试使用xsaves + xrstors会产生:

这同样适用于xsavec,它产生:

64 位模式的非_64变体xsave_和不允许使用吗?xrstor_

0 投票
2 回答
1641 浏览

x86 - AVX-512 和分支

我对掩蔽在理论上可以对分支做什么感到困惑。假设我有一个 Skylake-SP(哈,我希望..),我们忽略了编译器功能,这在理论上是可能的:

如果分支条件依赖于静态标志,并且所有分支都将数组设置为计算结果,假设编译器无论如何都不会将其优化为两个单独的循环,它可以向量化吗?

如果仅作为分支的子集设置有问题的值,它可以向量化吗?

如果分支条件本身依赖于向量数据,它可以向量化吗?

0 投票
2 回答
989 浏览

boolean-logic - 真值表简化为三元逻辑运算,vpternlog

我有很多变量(7 个或更多)的真值表,我使用工具(例如逻辑星期五 1)来简化逻辑公式。我可以手动完成,但这太容易出错了。然后我将这些公式转换为运行良好的编译器内在函数(例如_mm_xor_epi32)。

问题:使用vpternlog我可以进行三元逻辑运算。但是我不知道有一种方法可以将我的真值表简化为(有点)有效的 vpternlog 指令序列。

我不是在问是否有人知道一种可以简化为任意三元逻辑运算的工具,尽管那会很棒,但我正在寻找一种方法来进行这种简化。

编辑:我问了一个关于电气工程的类似问题。

0 投票
1 回答
2315 浏览

performance - AVX512 中的 128 位交叉通道操作是否提供更好的性能?

在为 AVX256、AVX512 和有一天 AVX1024 设计前瞻性算法并考虑到大 SIMD 宽度的完全通用置换的潜在实现复杂性/成本时,我想知道即使在 AVX512 内通常保持隔离的 128 位操作是否更好?

特别是考虑到 AVX 有 128 位单元来执行 256 位操作。

为此,我想知道所有 512 位向量中的 AVX512 置换类型操作与 512 位向量的每个 4x128 位子向量中的置换类型操作之间是否存在性能差异

0 投票
1 回答
838 浏览

c - 相同除数时的快速 AVX512 模

我试图找到潜在阶乘素数的除数(n!+-1 形式的数),因为我最近购买了 Skylake-X 工作站,我认为使用 AVX512 指令可以加快速度。

算法简单,主要步骤是对同一个除数重复取模。主要是循环大范围的 n 值。这是用 c 编写的幼稚方法(P 是素数表):

这里的想法是针对同一组除数检查大范围的 n,例如 1,000,000 -> 10,000,000。所以我们将对同一个除数取模数百万次。使用 DIV 非常慢,因此根据计算范围有几种可能的方法。在我的例子中,n 很可能小于 10^7,潜在除数 p 小于 10,000 G (< 10^13),所以数字小于 64 位,也小于 53 位!最大残差 (p-1) 乘以 n 大于 64 位。所以我认为最简单的蒙哥马利方法不起作用,因为我们从大于 64 位的数字中取模。

我发现了一些用于 power pc 的旧代码,其中 FMA 用于在使用双精度时获得高达 106 位的精确乘积(我猜)。所以我将这种方法转换为 AVX 512 汇编器(英特尔内部)。这是 FMA 方法的简单版本,它基于 Dekker (1971) 的工作,Dekker 产品和 TwoProduct 的 FMA 版本在尝试查找/谷歌搜索背后的基本原理时是有用的词。在这个论坛中也讨论了这种方法(例如这里)。

在这里我使用了魔法常数

那是双打的 2^51 + 2^52 幻数。

我将其转换为 AVX512(每个循环 32 个潜在除数)并使用 IACA 分析结果。它告诉吞吐量瓶颈:由于分配资源不可用,后端和后端分配停滞不前。我对汇编程序不是很有经验,所以我的问题是我能做些什么来加快速度并解决这个后端瓶颈?

AVX512 代码在这里,也可以从github找到

0 投票
1 回答
836 浏览

x86 - AVX512 比较和交换

AVX512 集中是否有原子 CAS 指令或等效指令?

我不能立即找到一个,但没有最好的谷歌 fu。

0 投票
1 回答
265 浏览

c++ - avx512中比较内在指令的不同语义?

使用 sse2 或 avx 比较操作返回全零或全一的位掩码(例如 _mm_cmpge_pd 返回一个 __m128d。

我找不到 avx512 的等价物。比较操作似乎只返回短位掩码。语义是否发生了根本变化,还是我遗漏了什么?