avx512相关内容

Vzeroall零寄存器是否为ymm16到ymm31?

vzeroall的documentation似乎不一致。这篇散文说: 该指令将所有XMM或YMM寄存器的内容置零。 然而,下面的伪代码表示在64位模式下,只有寄存器ymm0到ymm15受到影响: IF (64-bit mode) limit ←15 ELSE limit ← 7 FOR i in 0 .. limit: simd_reg_file[i][M ..
发布时间:2022-08-15 14:48:18 其他开发

AVX-512 和分支

我对掩蔽在理论上可以对分支做什么感到困惑.假设我有一个 Skylake-SP(哈哈,我希望..),我们忽略了编译器功能,这在理论上是可能的: 如果一个分支条件依赖于一个静态标志,并且所有分支都将一个数组设置为一个计算结果,假设编译器无论如何都不会将其优化为两个单独的循环,它可以向量化吗? 做 i = 1, nx如果 (my_flag .eq. 0) 那么a(i) = b(i) ** 2别的 ..
发布时间:2022-01-14 09:45:42 其他开发

SIMD 指令降低 CPU 频率

我读了这个文章.它谈到了为什么要使用 AVX-512 指令: 英特尔最新的处理器具有高级指令 (AVX-512),可能会导致内核或 CPU 的其余部分运行速度较慢,因为它们使用的功率太大. 我认为在 Agner 的博客上也提到了类似的内容(但我找不到确切的帖子). 我想知道 Skylake 支持的其他指令还有哪些类似的效果,它们会降低功耗以在以后最大化吞吐量?所有 v 前缀指令( ..
发布时间:2021-12-20 15:45:53 其他开发

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

我有一大块内存,比如 256 KiB 或更长.我想计算整个块中 1 位的数量,或者换句话说:将所有字节的“人口计数"值相加. 我知道 AVX-512 有一个 VPOPCNTDQ 指令计算 512 位向量内每个连续 64 位中 1 位的数量,并且 IIANM 应该可以在每个周期发出其中一个(如果有合适的 SIMD 向量寄存器可用) - 但我没有任何经验编写 SIMD 代码(我更像是一个 GPU ..
发布时间:2021-12-18 09:23:52 其他开发

使用 AVX512 生成蒙版的 BMI

我受到这个链接的启发https://www.sigarch.org/simd-instructions-thinked-harmful/ 查看 AVX512 的性能.我的想法是可以使用 AVX512 掩码操作删除循环后的清理循环. 这是我使用的代码 void daxpy2(int n, double a, const double x[], double y[]) {__m512d av ..
发布时间:2021-09-29 19:31:58 其他开发

哪些版本的 Windows 支持/需要哪些 CPU 多媒体扩展?(如何检查 SSE 或 AVX 是否完全可用?)

到目前为止,我已经设法发现: SSE 和 SSE2 对于 Windows 8 及更高版本(当然也适用于任何 64 位操作系统)是必需的 AVX 仅受 Windows 7 SP1 或更高版本支持 在 Windows 上使用 SSE3、SSSE3、SSE4.1、SSE 4.2、AVX2 和 AVX-512 有什么注意事项吗? 一些说明:如果我使用 SSE/AVX 集之一的指令,我需 ..
发布时间:2021-09-25 19:41:03 其他开发

SIMD:位包有符号整数

无符号整数可以通过使用“位打包"进行压缩技术:在无符号整数块内仅存储有效位,当块中的所有整数都为“小"时导致数据压缩.该方法称为 FOR(参考框架). 有 SIMD 库可以非常有效地执行此操作. 现在我想使用类似 FOR 的技术来编码 signed 整数,例如来自未排序的无符号整数的差分序列.每个有符号整数的符号都需要存储在某处,有两种选择: 将标志存储在单独的数据块中.这会增加 ..
发布时间:2021-08-27 19:46:55 其他开发

简单阵列处理循环的 AVX 512 与 AVX2 性能对比

我目前正在对 DSP 应用程序进行一些优化和比较矢量化可能性,这对于 AVX512 来说似乎是理想的,因为这些只是简单的不相关数组处理循环.但是在新的 i9 上,与 AVX2 相比,我在使用 AVX512 时没有测量出任何合理的改进.任何指针?有什么好的结果吗?(顺便说一句.我试过 MSVC/CLANG/ICL,没有明显区别,很多时候 AVX512 代码实际上看起来更慢) 解决方案 这看起 ..
发布时间:2021-06-15 19:11:51 其他开发

AVX512-如何将所有设置的位右移?

如何将屏蔽寄存器的所有设置位向右移动?(到最下面的最低位置). 例如: __ mmask16 mask = _mm512_cmpeq_epi32_mask(vload,vlimit);//掩码= 1101110111011101 如果将所有设置的位右移,则会得到: 1101110111011101->0000111111111111 如何有效地做到这一点? 下面您可以看到 ..
发布时间:2021-05-16 19:51:45 其他开发

禁用所有用于g ++构建的AVX-512指令

嗨,我正在尝试使用这些标志在没有任何avx512指令的情况下进行构建: -march = native -mno-avx512f .但是我仍然得到一个二进制文件生成了AVX512( vmovss )指令(我正在使用elfx86exts进行检查).知道如何禁用这些功能吗? 解决方案 -march = native -mno-avx512f 是正确的选项, ..
发布时间:2021-05-09 20:31:44 其他开发

真值表归结为三元逻辑运算,vpternlog

我有很多包含多个变量的真值表(7个或更多),并且使用一种工具(例如,逻辑星期五1)简化逻辑公式.我可以手工完成,但这太容易出错了.然后,我将这些公式转换为编译器固有函数(例如, _mm_xor_epi32 )可以正常工作. 问题:使用 vpternlog ,我可以进行三元逻辑运算.但是我不知道有一种方法可以将我的真值表简化为(某种程度上)有效的vpternlog指令序列. 我并不是要问 ..
发布时间:2021-04-15 20:40:10 其他开发

AVX-512指令编码-{er}含义

在《英特尔x86指令集参考》中,有许多AVX-512指令在指令中带有可选的{er}.例如,一种形式的VADDPD被定义为 EVEX.NDS.512.66.0F.W1 58/rVADDPD zmm1 {k1} {z},zmm2,zmm3/m512/m64bcst {er} {er}是什么意思? 解决方案 摘自Intel SDM Volume 2A,3.1.1.3“操作码摘要表中的指令 ..
发布时间:2021-04-12 20:55:07 其他开发

_mm512_load_epi32和_mm512_load_si512有什么区别?

《英特尔内在函数指南》仅声明_mm512_load_epi32: 将512位(由16个压缩的32位整数组成)从内存加载到dst 和_mm512_load_si512: 将512位整数数据从内存加载到dst 这两者之间有什么区别?文档不清楚. 解决方案 没有区别,只是愚蠢的冗余命名.为清楚起见,请使用_mm512_load_si512.谢谢,英特尔.像往常一样,更容易 ..
发布时间:2020-11-30 04:52:11 其他开发