首页 > 解决方案 > 如何在不支持硬件的情况下测试 AVX-512 指令?

问题描述

我正在尝试学习 x86-64 的新 AVX-512 指令,但我的两台计算机都不支持它们。我尝试使用各种反汇编程序(从 Visual Studio 到在线反汇编程序:12)来查看特定操作码编码的说明,但我得到的结果有些矛盾。另外,运行一些指令并查看它们的实际输出会很好。

所以我想知道是否有在线服务允许编译小型(x86-64)汇编代码并在特定处理器上运行或逐步执行它?(比如说,英特尔的 Sandy Bridge、Cannon Lake 等)

标签: assemblyx86intelamd-processoravx512

解决方案


使用英特尔® 软件开发仿真器(又名 SDE)在支持未来指令集的仿真 CPU 上运行可执行文件。它是免费软件(不是开源的,但可以免费下载),适用于 Linux、Windows,我认为也适用于 OS X。

https://software.intel.com/en-us/articles/debugging-applications-with-intel-sde有关于如何在 Windows 或 Linux 上使用它进行调试的分步说明:SDE 可以作为 GDB 远程工作,所以你可以运行sde -debug -- ./your-program,然后在另一个终端运行gdb ./your-program并使用target remote :portnumber连接到SDE进程,这样你就可以设置断点和单步。


如果 QEMU 添加了对模拟 AVX512 的支持,您也许可以使用 QEMU 做同样的事情。QEMU 也可以充当 GDB 远程。

QEMU 肯定有可配置的指令集的东西,例如你可以告诉它用 AVX 模拟 x86 而不是 AVX2(如 Sandybridge)。SDM 可能也可以做同样的事情。

如果你想验证你的 CPUID 检查不假设任​​何东西意味着任何其他不能保证的东西,你甚至可以告诉它模拟你在真实硬件上找不到的东西,比如 AVX2 但不是 BMI1/2。


请记住,这些对于性能测试基本上都是无用的,仅用于矢量化的正确性。 IACA可能有助于了解 SKX 的性能,但它远非完美,并且根本没有模拟内存瓶颈。(只有在某种程度上详细的实际管道。)


推荐阅读