问题标签 [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.
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 的一些转储,但没有运气。
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?
assembly - 我什么时候可以调用 xsaves 和 xsaves64?
什么时候可以调用xsaves
and xsaves64
?
使用英特尔软件开发模拟器(8.12.0-2017-10-23),我可以毫无问题地xsaves64 + xrstors64
从用户空间使用,但尝试使用xsaves + xrstors
会产生:
这同样适用于xsavec
,它产生:
64 位模式的非_64
变体xsave_
和不允许使用吗?xrstor_
x86 - AVX-512 和分支
我对掩蔽在理论上可以对分支做什么感到困惑。假设我有一个 Skylake-SP(哈,我希望..),我们忽略了编译器功能,这在理论上是可能的:
如果分支条件依赖于静态标志,并且所有分支都将数组设置为计算结果,假设编译器无论如何都不会将其优化为两个单独的循环,它可以向量化吗?
如果仅作为分支的子集设置有问题的值,它可以向量化吗?
如果分支条件本身依赖于向量数据,它可以向量化吗?
boolean-logic - 真值表简化为三元逻辑运算,vpternlog
我有很多变量(7 个或更多)的真值表,我使用工具(例如逻辑星期五 1)来简化逻辑公式。我可以手动完成,但这太容易出错了。然后我将这些公式转换为运行良好的编译器内在函数(例如_mm_xor_epi32)。
问题:使用vpternlog我可以进行三元逻辑运算。但是我不知道有一种方法可以将我的真值表简化为(有点)有效的 vpternlog 指令序列。
我不是在问是否有人知道一种可以简化为任意三元逻辑运算的工具,尽管那会很棒,但我正在寻找一种方法来进行这种简化。
编辑:我问了一个关于电气工程的类似问题。
performance - AVX512 中的 128 位交叉通道操作是否提供更好的性能?
在为 AVX256、AVX512 和有一天 AVX1024 设计前瞻性算法并考虑到大 SIMD 宽度的完全通用置换的潜在实现复杂性/成本时,我想知道即使在 AVX512 内通常保持隔离的 128 位操作是否更好?
特别是考虑到 AVX 有 128 位单元来执行 256 位操作。
为此,我想知道所有 512 位向量中的 AVX512 置换类型操作与 512 位向量的每个 4x128 位子向量中的置换类型操作之间是否存在性能差异?
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找到
x86 - AVX512 比较和交换
AVX512 集中是否有原子 CAS 指令或等效指令?
我不能立即找到一个,但没有最好的谷歌 fu。
c++ - avx512中比较内在指令的不同语义?
使用 sse2 或 avx 比较操作返回全零或全一的位掩码(例如 _mm_cmpge_pd 返回一个 __m128d。
我找不到 avx512 的等价物。比较操作似乎只返回短位掩码。语义是否发生了根本变化,还是我遗漏了什么?