问题标签 [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.
gcc - 发行版将 GCC 升级到 5.5.0 后,AVX512 内在函数标头会产生许多错误
我的 Linux 发行版将我的 GCC 版本升级到了 5.5.0(如果我知道为什么,那该死的)。现在,当我尝试构建包含 的代码时avx512fintrin.h
,会出现大量编译器错误:
等等。为什么会发生这种情况,有没有办法(希望不是太特定于发行版)来解决或规避这个问题?
PS - 如果重要,我使用 GNU/Linux Mint 18.3。
avx512 - AVX512 缺少内在的 _mm512_round_ps
我缺少_mm512_round_ps
AVX512 的内在特性(它仅适用于 KNC)。知道为什么这不可用吗?
什么是一个好的解决方法?
适用
_mm256_round_ps
于上半部和下半部并融合结果?使用
_mm512_add_round_ps
一个参数为零?
谢谢!
c++ - 通过 avx 指令矢量化间接访问
我最近被介绍给向量指令(理论上),我对如何使用它们来加速我的应用程序感到兴奋。
我想改进的一个领域是一个非常热的循环:
但当然,所有 3 个主要编译器(msvc、gcc、clang)都拒绝对此进行向量化。我可以理解为什么,但我想得到确认。
如果我必须手动对其进行矢量化,它将是:
(1) VectorLoad "arr",这带来了 16 个 4 字节的整数,比如说到 zmm0
(2) 16个内存从zmm0[0..3]指向的地址加载到zmm1[0..3],从zmm0[4..7]指向的地址加载到zmm1[4..7]所以等等
(3)比较zmm0和zmm1
(4) 向量 popcnt 到输出中找出最高有效位并将其除以 8 得到匹配的索引
首先,向量指令可以做这些事情吗?就像他们可以做这个“收集”操作一样,即从指向zmm0的地址加载?
这是 clang 生成的:
assembly - AVX-512 中的压缩和扩展指令有什么区别?
我正在研究Intel intrinsics guide中的扩展和压缩操作。我对这两个概念感到困惑:
为了__m128d _mm_mask_expand_pd (__m128d src, __mmask8 k, __m128d a) == vexpandpd
从 a 加载连续的活动双精度(64 位)浮点元素(它们各自的位在掩码 k 中设置),并使用 writemask k 将结果存储在 dst 中(当相应的掩码位为没有设置)。
为了__m128d _mm_mask_compress_pd (__m128d src, __mmask8 k, __m128d a) == vcompresspd
将 a 中的活动双精度(64 位)浮点元素(在 writemask k 中设置了相应位的元素)连续存储到 dst,并从 src 传递其余元素。
有没有更清晰的描述或谁能解释更多?
gcc - 为什么 gcc 不提供浮点绝对值的 AVX512F 内在函数?
简短的问题:英特尔内部指南https://software.intel.com/sites/landingpage/IntrinsicsGuide说这_mm512_abs_ps
适用于 AVX512F。但是,gcc 5.4 似乎没有提供这种内在特性。为什么是这样?它是否出现在以后的 gcc 版本中?
c++ - AVX512非法指令
在我之前的帖子中,我解释说我从 AVX 开始以加速我的代码(请注意,虽然有一些共同点,但这篇帖子指的是 AVX512,而上一篇指的是 AVX2,据我所知,它们略有不同并且需要不同的编译标志)。在尝试了 AVX2 之后,我决定尝试使用 AVX512 并更改了我的 AVX2 功能:
因为我认为应该是它的等价物:
在非 AVX 形式中是:
编译代码后,我收到以下错误:
令我惊讶的是,这个错误发生在函数中的调用sqrt
中getData
。如果我删除sqrt
呼叫,则错误会进一步出现在__m512d divisor = _mm512_set_pd((d....
. 关于正在发生的事情有什么想法吗?
这是完整的示例。
非常感谢。
我正在使用c++
(7.3.0) 进行编译,并带有以下选项-std=c++17 -Wall -Wextra -O3 -fno-tree-vectorize -mavx512f
。我已经按照此处的说明进行了检查,并且我的 CPU(Intel(R) Core(TM) i7-4710HQ CPU @ 2.50GHz)支持 AVX2。该列表是否应该有 AVX-512 来表明对此的支持?
simd - GCC 不断抱怨 AVX512 函数 _mm512_cvt_roundpd_epi64 的“错误:不正确的舍入操作数”
我正在使用 _mm512_cvt_roundpd_epi64 并不断收到编译器错误:
/dump/1/alicpp2/built/gcc-7.3.0-7u2/gcc-7.3.0/lib/gcc/x86_64-pc-linux-gnu/7.3.0/include/avx512dqintrin.h:1574:14:错误: 不正确的舍入操作数 __R);
这是我的代码:
还有我的 CMakeFileLists.txt:
有人熟悉 AVX512 库并帮助回答我的问题吗?
linux - 动态确定恶意 AVX-512 指令的执行位置
我有一个在支持 AVX-512 的 Intel 机器上运行的进程,但该进程不直接使用任何 AVX-512 指令(asm 或内在函数)并且编译时使用,-mno-avx512f
因此编译器不会插入任何 AVX-512 指令.
然而,它在降低的 AVX 涡轮频率下无限期地运行。毫无疑问,有一条 AVX-512 指令通过库、(非常不可能的)系统调用或类似的东西潜入某处。
与其尝试“二分查找” AVX-512 指令的来源,有什么方法可以立即找到它,例如,捕获这样的指令?
操作系统是 Ubuntu 16.04。
x86 - 对齐与未对齐 x86 SIMD 指令之间的选择
SIMD指令一般有两种类型:
A. 使用对齐的内存地址的那些,如果地址未在操作数大小边界上对齐,则会引发通用保护 (#GP) 异常:
B. 那些使用未对齐的内存地址的,不会引发这样的异常:
但我只是好奇,我为什么要在脚上开枪并使用第一组的对齐内存指令呢?