0

例如,在 x86-64 的情况下,您有一个使用 avx-512 指令或任何其他特殊用途指令的程序,而有问题的 cpu 不支持低级别的指令,例如基于 haswell 的 cpu,这种情况如何解决?

程序只是无法运行(我的第一个想法)还是有办法让 cpu 仍然使用它支持的指令运行程序,但是它根本不会获得相关指令提供的性能优势?

4

1 回答 1

2

如果程序检查 CPU 功能并避免实际运行不受支持的指令,那么您只会错过性能。x264 和 x265 之类的库执行此操作,当它们开始时将函数指针设置为该 CPU 的最佳支持版本的函数版本。

如果您确实运行了不受支持的指令(例如,因为您编译时gcc -O3 -march=skylake-avx512告诉编译器它可以假定支持 AVX-512),则有两种可能性:

  • 它碰巧解码为其他东西(AVX-512 不会出现这种情况,但例如lzcnt解码为时确实会发生bsr)。
  • CPU 引发#UD 异常(未定义指令)。操作系统处理它并向进程提供 SIGILL(非法指令),或在非 POSIX 操作系统(如 Windows)上等效。
于 2021-10-27T20:39:32.990 回答