问题标签 [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 回答
997 浏览

macos - openssl 出现非法指令错误

由于 OSX 的 openssl 版本过时,我需要将更多最新的副本与我的应用程序捆绑libssl在一起libcrypto

我分发的捆绑版本似乎可以在最近的系统上运行(我自己的系统和我构建这些库的系统是 2015 MBP) - 但在其他一些系统上,我使用这些捆绑库时遇到“非法指令”错误。

我的问题是:

(1) 非法指令的发生是因为二进制文件正在使用高级指令(例如 AVX-512),而在某些系统上不存在该指令?

(2)我如何构建可以绝大多数相对较新的苹果系统捆绑和使用的libssl版本?(不会导致非法指令..)libcrypto

0 投票
0 回答
213 浏览

performance - 将 x86-64 整数指令与 AVX1/2/512 指令混合会受到惩罚吗?

我见过很多使用 AVX(所有三种风格)的汇编,在我见过的所有情况下,最集中的一种指令是代码执行的最好的。但是,例如,像加载到 32 位寄存器然后广播到 AVX512 或 AVX2 的所有通道这样的事情说……加载一个寄存器然后置换掉不是更好/更快吗?

特别是,混合 x86_64 和 AVX 系列指令是否会受到惩罚?我知道一般来说 SSE 和 AVX 混合会受到这样的惩罚。

我知道我可以对此进行测试,但我宁愿在开始那个小项目之前先了解大众的知识。我相信有人已经知道这一点。

0 投票
2 回答
2509 浏览

x86 - AVX2 编译的程序是否仍然可以使用支持 AVX-512 的 CPU 的 32 个寄存器?

假设针对 AVX2 的编译和使用 C++ 内在函数,如果我使用每个体体计算的 17 个寄存器编写 nbody 算法,第 17 个寄存器可以间接(寄存器重命名硬件)或直接(Visual Studio 编译器,gcc 编译器)映射到 AVX -512 寄存器来切断内存依赖?例如,skylake 架构有 1 或 2 个 AVX-512 fma 单元。这个数字是否也会改变可用的总寄存器?(具体来说,一个至强银 4114 cpu)

如果这行得通,它是如何工作的?当所有指令都是 AVX2 或更少时,第一个硬件线程使用每个 ZMM 向量的前半部分,第二个硬件线程使用每个 ZMM 向量的后半部分?


编辑:如果目标机器上会有在线编译(例如,使用 OpenCL)怎么办?司机可以为我做以上注册使用吗?

0 投票
1 回答
611 浏览

c++ - 反转 __m512i 寄存器中的值

我想颠倒__m512i寄存器中所有值的顺序。我的主要问题是我没有找到关于如何使用所有不同的随机播放操作的解释。我已经尝试过_mm512_shuffle_epi32,但我没有找到任何解释_MM_PERM_AAAA, _MM_PERM_AAAB, ... 是如何实际工作的,并且通过尝试它们我不知道如何使用它们。

0 投票
0 回答
250 浏览

intel - 用于更新数组中地址处的值的 SIMD 指令

需要知道 Intel Xeon Phi scatter/gather 是否可以实现这个用例

想要使用向量指令和 ptr 在 a、b 和 c 中加 1 需要向量运算不是立即值而是地址处的值,

0 投票
0 回答
235 浏览

gcc - 使用 avx 512 时 gcc 优化导致错误答案

更新:似乎 gcc 在这里真的有问题。288 288 288无论使用 clang++ 编译时使用什么优化选项,我都会得到。

这是我的代码。

288 288 288在编译时得到g++ -std=c++17 -march=native main.cpp.
但是我在编译时得到. 另外,如果我注释该行,我会在 O1 标志编译时得到。(为什么第三个答案变成240???) gcc 这里有问题吗?还是我的问题? 顺便说一句,如果您对此问题有一个好的标题,请告诉我。 以下是我的机器信息。 CPU i7-7820X gcc 版本 7.3.1 20180312 (GCC) clang 版本 6.0.0 (tags/RELEASE_600/final) 目标:x86_64-pc-linux-gnu Linux 4.15.14-1-ARCH #1 SMP PREEMPT240 240288g++ -std=c++17 -march=native -O1 main.cpp
t512[i+1]=_mm512_sad_epu8(t512[7],enc[j]);240 0240







0 投票
1 回答
763 浏览

c++ - MSVC 2017 是否支持具有自动矢量化功能的 AVX 512?

我一直在阅读有关 AVX 512 和 MSVC 2017 的信息,但设置中的最大目标是 /arch:AVX2。我尝试了 /arch:AVX512 并尝试在不同的地方停止它(在测试各种矢量化循环的基准应用程序中),我可以看到 AVX 指令,但不是真正的 AVX512,我在不支持 AVX512 的计算机上运行它,所以它应该崩溃。那么情况如何呢?(我正在运行 MSVC 15.6.6)。

0 投票
2 回答
3480 浏览

assembly - 使用 AVX-512 或 AVX-2 对大数据计数 1 位(人口计数)

我有一大块内存,比如 256 KiB 或更长。我想计算整个块中 1 的位数,或者换句话说:将所有字节的“人口计数”值相加。

我知道 AVX-512 有一条VPOPCNTDQ 指令,它计算 512 位向量中每个连续 64 位中 1 的位数,而 IIANM 应该可以在每个周期发出其中一个(如果适当的 SIMD 向量寄存器是可用) - 但我没有任何编写 SIMD 代码的经验(我更像是一个 GPU 人)。此外,我不是 100% 确定编译器对 AVX-512 目标的支持。

在大多数 CPU 上,仍然不(完全)支持 AVX-512;但 AVX-2 已广泛使用。我无法找到类似于 VPOPCNTDQ 的小于 512 位的矢量化指令,所以即使理论上我也不确定如何使用支持 AVX-2 的 CPU 快速计算位数;也许存在这样的东西,而我只是以某种方式错过了它?

无论如何,我很欣赏一个简短的 C/C++ 函数 - 使用一些内部包装库或内联汇编 - 对于两个指令集中的每一个。签名是

笔记:

0 投票
1 回答
332 浏览

c++ - _mm512_exp_pd 与 GNU 编译器

以下代码适用于 Intel 编译器(版本:18.0.2),但不适用于 GNU 编译器(版本:6.1.0):

错误消息状态如下:error: ‘_mm512_exp_pd’ was not declared in this scope。它来自SVML 库

我正在使用以下编译器标志:-std=c++11 -march=knl -mtune=knl -fpic -O3 -DNDDEBUG.

我在这里错过了编译器标志吗?

0 投票
0 回答
466 浏览

c - 在 VS 2017 中禁用 AVX-512 内部函数

我没有 Xeon Phi,也不打算为其编码。因此,直到 AVX-512 成为主流(据传从 Intel Gen 9 开始就是这种情况),这些内在函数对我来说毫无用处。

_mm_cvtepi64_epi32例如,AVX/2 缺少AVX-512 中存在的 。我想把它写成一个函数(使用随机播放)。但是,我不能使用这个名称,因为它是在“zmmintrin.h”中定义的。该标题链接到我链接到的标题。

我知道简单的解决方案是使用另一个名称。不过,这会打破命名约定。

有没有办法在我的项目中覆盖名称或以某种方式禁用 AVX-512?