Avx512_fp16 和 Avx512bw 之间的关系(在非 Intel 机器上)

问题描述 投票:0回答:1

我正在编写一个使用 vfmadd231ph (来自 avx512_fp16)和 vpbroadcastw (来自 avx512bw)的程序。该程序在运行时检测 CPU 功能并分派到代码路径(包括需要 avx512_fp16 和 avx512bw 的代码路径)。 我的问题:在avx512_fp16存在的情况下是否能保证avx512bw?看到这个帖子后: 此处指的是英特尔文档“AVX512_FP16* ISA 扩展要求实现 AVX512BW 功能...”

因此,对于英特尔机器,假设这一点似乎没问题。

AMD 机器怎么样?我找不到有关此问题的任何信息?一般来说,与 Intel 相比,AMD 关于 Avx512 的文档比较缺乏。

Clang 似乎假设这对于所有 avx512_fp16 都是如此,无论供应商如何。我想这样做是安全的。

我问的原因是我正在使用内联汇编,如果不能保证这一点,那么当 avx512bw 存在或不存在时,我将必须有单独的 2x 代码路径,这是我想避免的。

谢谢

我期待 AMD 的规范。

编辑1:另外,据我所知,没有AMD CPU 存在avx512_fp16。所以,我宁愿要求未来的CPU,如果有这样的CPU的话。

编辑 2:更具体地说,我询问其他人是否有更多信息以及我错过的在线文档。

x86 avx512
1个回答
0
投票

任何供应商都不太可能制造具有任何 AVX-512 功能但省略 AVX-512BW 的 CPU(Xeon Phi 除外)。

它是

-march=x86-64-v4
的一部分,因为除了带有 AVX-512F 的 Xeon Phi 之外,每个 CPU 都有 AVX-512BW,从 Skylake-Xeon 开始。 它也是 AVX10.1

的一部分

对于实现 AVX-512FP16 的 CPU 来说更是如此,正如您所指出的,AVX-512FP16 没有自己的广播指令,并且是围绕带有它的 CPU 也将具有 AVX-512BW 的假设而设计的。 或者至少是 AVX-512BW 的 16 位元素大小部分。


您可以编写 CPU 功能检测代码来检查 FP16 和 BW,以防万一有人在启用了奇怪的功能组合的模拟器或虚拟机中运行它。 但在这种情况下,您可以完全不使用 FP16,因为它不是任何旨在取得商业成功的现实世界 CPU 所具备的功能组合。

CPU 供应商可以做很多事情,但我们不必对其进行优化,因为它们会使 CPU 使用起来很痛苦,或者与某些现有的商业重要软件存在问题。 在 x86 世界中尤其如此,其中与现有二进制文件的向后兼容性始终是一个卖点,并且只有 Xeon Phi 真正尝试过销售基于 x86 的 CPU,但该 CPU 并非旨在有效运行现有二进制文件。 例如,请参阅所有支持 AVX2 的 CPU 是否也支持 SSE4.2 和 AVX? - 假设您可能拥有一个不支持向量指令的旧版 SSE 编码的 CPU,但实际上并不值得担心。

在极不可能的情况下,未来确实会出现一些你想要支持的奇怪的 CPU,它可能需要自己的调整选择,并支持奇怪的功能组合。 因此,您可以等到那时再为其开发函数版本。 现在不太可能需要花时间写任何东西了。

© www.soinside.com 2019 - 2024. All rights reserved.