如何在不支持硬件的情况下测试AVX-512指令?

Mik*_*keF 3 x86 assembly amd intel avx512

我正在尝试学习x86-64新的AVX-512指令,但是我的计算机均不支持它们。我试着用各种反汇编(从Visual Studio网上的:12)看看具体操作码的编码指令,但我发现有些矛盾的结果。另外,运行一些指令并查看其实际输出会很好。

所以我想知道是否有一个在线服务可以编译小的(x86-64)汇编代码并在特定处理器上运行或逐步执行?(说,英特尔的Sandy BridgeCannon Lake等等)

Pet*_*des 7

使用英特尔®软件开发仿真器(又名SDE)在支持未来指令集的仿真CPU上运行可执行文件。它是免费软件(不是开放源代码,而是免费下载),并且可用于Linux,Windows和OSX。

https://software.intel.com/zh-cn/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而不是AVX2(如Sandybridge)来模拟x86。SDM可能做同样的事情。

如果要验证您的CPUID检查没有假设任何暗示任何其他无法保证的内容,您甚至可以告诉它模拟在真实硬件上找不到的东西,例如AVX2,但不能模拟BMI1 / 2。


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


Han*_*ave 3

有一些在线工具至少允许您选择不同的程序集方言,但我没有看到任何支持 Xeon Phi 或 Skylake 的工具。但是,英特尔 C++ 和 Fortran 编译器支持这些附加架构的交叉编译。看来您使用的是Windows,并且这是直接支持的。

另一种途径包括租用 AWS EC2 C5 实例来使用,该实例本身支持 AVX-512。出于学习目的,对于预留实例,此操作只需 0.085 美元/小时;如果您接受 Spot 定价,则只需 0.0185 美元/小时。