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

c++ - 覆盖来自 SVML 的函数调用

Xeon-Phi Knights Landing 内核具有快速exp2指令vexp2pd(固有_mm512_exp2a23_pd)。英特尔 C++ 编译器可以exp使用编译器附带的短向量数学库 (SVML) 对函数进行向量化。具体来说,它调用了函数__svml_exp8

但是,当我单步执行调试器时,我看不到它__svml_exp8使用了该vexp2pd指令。这是一个具有许多 FMA 操作的复杂函数。我知道这vexp2pd不如exp但如果我使用-fp-model fast=1(默认值)或fp-model fast=2我希望编译器使用此指令但它没有。

我有两个问题。

  1. 有没有办法让编译器使用vexp2pd
  2. 如何安全地覆盖对 的调用__svml_exp8

至于第二个问题,这是我迄今为止所做的。

这安全吗?有没有更好的解决方案,例如内联函数?在下面的测试代码中,这比我不覆盖时快大约 3 倍。

0 投票
1 回答
1719 浏览

c - 将 256 位 AVX 向量存储为无符号长整数的最佳方法

我想知道将 256 位长 AVX 向量存储为 4 个 64 位无符号长整数的最佳方法是什么。根据网站https://software.intel.com/sites/landingpage/IntrinsicsGuide/中编写的功能,我只能使用 maskstore(下面的代码)来执行此操作。但这是最好的方法吗?或者还有其他方法吗?

0 投票
0 回答
183 浏览

intel - AVX512 __m512d 的双精度绝对值?

我正在寻找一种内在的方法来获取 __m512d 元素的绝对值。显然,_mm512_andnot_pd在 CORE-AVX512 上不可用。有没有等价的?

0 投票
2 回答
3285 浏览

gcc - Cygwin 中 .seh_savexmm 的无效注册

$ make 我曾与 cygwin 合作过,但出现编译错误。我不确定 .seh_savexmm 的无效注册是什么,请帮助我。我在谷歌上搜索了这个问题,但没有发现有很多问题,但不是灵魂。请帮我。

0 投票
2 回答
2009 浏览

c - 矢量化 - SSE、AVX 和 AVX2 的预期加速

我正在使用以下处理器 i7 在 MacOS 上进行矢量化基准测试:

$ sysctl -n machdep.cpu.brand_string

我的 MacBook Pro 是 2014 年中期的。

我尝试使用不同的标志选项进行矢量化:我感兴趣的 3 个选项是 SSE、AVX 和 AVX2。

对于我的基准测试,我添加了 2 个数组的每个元素并将总和存储在第三个数组中。

我必须让你注意到我正在使用double这些数组的类型。

以下是我的基准代码中使用的函数:

1*) 首先使用 SSE 矢量化:

2*) 第二个使用 AVX256 矢量化:

对于 SSE 矢量化,我预计 Speedup 大约等于 2,因为我在 128 位 = 16 字节 = 2* sizeof(double) 上对齐数据。

我得到的 SSE 矢量化结果如下图所示:

SSE 的结果

所以,我认为这些结果是有效的,因为 SpeedUp 大约是因子 2。

现在对于 AVX256,我得到下图:

AVX256 的结果

对于 AVX256 矢量化,我预计 Speedup 大约等于 4,因为我在 256 位 = 32 字节 = 4* sizeof(double) 上对齐数据。

但正如你所看到的,我仍然得到一个factor 2而不是4SpeedUp。

我不明白为什么使用 SSE 和 AVX 矢量化的 Speedup 得到相同的结果。

它是否来自“编译标志”,来自我的处理器型号,......我不知道。

这是我为上述所有结果所做的编译命令行:

上证所:

对于 AVX256:

此外,对于我的处理器模型,我可以使用 AVX512 矢量化吗?(一旦这个问题的问题将得到解决)。

谢谢你的帮助

更新 1

我尝试了不同的选项,@Mischa但仍然无法使用 AVX 标志和选项获得 4 倍的加速。您可以在http://example.com/test_vectorization/main_benchmark.c.txt上查看我的 C 源代码(带有 .txt 扩展名,以便直接查看浏览器),用于基准测试的 shell 脚本是http://example.com /test_vectorization/run_benchmark

正如@Mischa 所说,我尝试应用以下命令行进行编译:

$GCC -O3 -Wa,-q -mavx -fprefetch-loop-arrays main_benchmark.c -o vectorizedExe

但生成的代码没有 AVX 指令。

如果你能看看这些文件,那就太好了。谢谢。

0 投票
1 回答
454 浏览

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

在 Intel x86 指令集参考中,有许多 AVX-512 指令在指令中具有可选的 {er}。例如,一种形式的 VADDPD 定义为

{er} 是什么意思?

0 投票
0 回答
226 浏览

c++ - 为什么这种矢量化在 AVX-512 而不是 AVX2 上失败?

我有我在我的 AVX2 机器上测试的代码:

正如 Intel Advisor 所建议的,我添加#pragma omp simd了强制矢量化,因为编译器(icpc2017 更新 3)假定不存在依赖项。在我的 AVX2 机器上,这不会产生任何错误,实际上会提高性能。

但是,在 AVX-512 机器上(具有相同的编译器和版本),这会产生分段错误。为什么会发生这种情况?

编译标志是相同的,期望一个使用-xCORE-AVX2和另一个-xMIC-AVX512。这是完整的编译标志集:

0 投票
1 回答
312 浏览

avx - 如何检测 Xeon Phi (Knights Landing)

英特尔工程师写道,我们应该使用 VZEROUPPER/VZEROALL 来避免在所有处理器(包括未来的 Xeon 处理器,但不是 Xeon Phi)上昂贵地转换到非 VEX 状态:https ://software.intel.com/pt-br/node/ 704023

人们还测量并发现VZEROUPPER和VZEROALL在Knights Landing上很昂贵:

64 位模式下两条指令的 36 个时钟周期(32 位模式下 30 个时钟)。

请参阅上面的链接。

因此,如果我刚刚使用了 ymm0 和 ymm1,我的代码将如下所示:

如何检测 Xeon Phi(Knights Landing 和更高版本的 Xeon Phi 处理器)来实现上述代码?

我们现在有以下关于 VZEROUPPER/VZEROALL 的情况:

  1. 这些指令在 Xeon Phi Knight Landing 36 个时钟周期上对于 64 位模式下的两条指令(32 位模式下的 30 个时钟周期)是不需要的并且非常昂贵。
  2. 这些指令非常便宜,在 Xeon 和 Core 处理器 (Skylake/Kaby Lake) 上是必需的,在可预见的将来 Xeon 也需要这些指令,以避免昂贵的过渡到非 VEX 状态。

广告材料声称Xeon Phi(Knights Landing)与其他Xeon处理器完全兼容。

是否有可靠的方法来检测 Xeon Phi,以避免 VZEROUPPER/VZEROALL?

James R.有一篇文章“如何检测 Knights Landing AVX-512 支持(英特尔® 至强融核™ 处理器)”,更新于 2016 年 2 月 22 日,但它只关注 Knights Landing 上可用的特定新指令。所以关于 VEX 转换仍然不是很清楚。

很高兴知道英特尔是否计划实施 CPUID 位来显示非 VEX 状态是否成本高昂?例如:

  • 位设置为 0 - VEX 状态转换成本高,但 VZEROUPPER/VZEROALL 成本低,应用于清除状态;
  • 位设置为 1——没有转换惩罚,不需要 VZEROUPPER/VZEROALL。

上面提到的关于检测 Knights Landing 的文章建议检查 Knights Landing 中介绍的位 AVX-512F+CD+ER+PF。

所以代码建议一次检查所有这些位,如果都设置好了,那么我们就在 Knights Landing:

很高兴知道英特尔是否计划在不久的将来将这些所有位添加到简单的 Xeon(非 Phi)或 Core 处理器中,因此它们还将支持 AVX-512F+CD+ER+PF 中引入的功能骑士登陆?

如果 Xeon 和 Core 处理器将支持 AVX-512F+CD+ER+PF,我们将无法区分 Xeon 和 Xeon Phi。

请指教。

0 投票
0 回答
267 浏览

c++ - 穷人的替代品 _mm_cvttpd_epi64

AXV512DQ,有_mm_cvttpd_epi64,例如在avx512vldqintrin.h我们找到的文件中

它将两个压缩的 64 位浮点数 ( __m128d) 转换为两个压缩的 64 位整数 ( __m128i)。还_mm256_cvttpd_epi64可以将四个压缩的 64 位浮点数 ( __m256d) 转换为四个压缩的 64 位整数 ( __m256i)。

但是,很多机器不支持AXV512DQ. 所以我想知道穷人的最佳选择是什么。

我应该说我已经对仅适用于 64 位浮点数的解决方案感到满意,该解决方案可以无损转换为 32 位浮点数。

0 投票
2 回答
651 浏览

virtual-machine - Google Compute 上的虚拟机是否可以检测到它们何时被迁移?

当虚拟机迁移到不同的硬件时,是否可以通知在谷歌计算虚拟机上运行的应用程序?

我是大量使用矢量指令 (SSE/AVX/AVX-512) 的应用程序 (HMMER) 的开发人员。我正在开发的版本在启动时会探测其硬件,以确定哪些向量指令可用并选择最佳集合。

我们一直在考虑在 Google Compute 和其他云引擎上运行我们的程序,一个问题是,如果虚拟机在运行我们的程序时从一台物理机器迁移到另一台物理机器,新机器可能支持不同的指令,导致我们的程序要么崩溃,要么执行得比它可能的慢。

有没有办法在虚拟机迁移时通知在谷歌计算虚拟机上运行的应用程序?我发现的唯一相关信息是,您可以将 VM 设置为在迁移时执行关闭/重新启动序列,这将杀死所有当前正在执行的程序,但至少会让用户知道他们需要重新启动程序。