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

时间:2018-08-12 01:59:34

标签: assembly x86 intel amd avx512

我正在尝试学习<bean name="objectMapper" class="org.springframework.http.converter.json.JacksonObjectMapperFactoryBean" autowire="no">的新AVX-512指令,但是我的计算机都不支持它们。我尝试使用各种反汇编程序(从Visual Studio到在线的反汇编程序:12)来查看特定操作码编码的说明,但是结果有些矛盾。另外,运行一些指令并查看其实际输出会很不错。

所以我想知道是否有一个在线服务可以编译小的(x86-64)汇编代码并在特定处理器上运行或逐步执行它? (例如,英特尔的<property name="featuresToDisable"><list>等)

2 个答案:

答案 0 :(得分:4)

使用Intel® Software Development Emulator, aka 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,然后在另一个终端上运行{ {1}}并使用gdb ./your-program连接到SDE进程,因此您可以设置断点和单步执行。


如果QEMU增加了对模拟AVX512的支持,则您也许可以对QEMU做同样的事情。 QEMU也可以充当GDB远程服务器。

QEMU绝对具有可配置的指令集内容,例如您可以告诉它使用AVX而不是AVX2(例如Sandybridge)来模拟x86。SDM可能做同样的事情。

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


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

答案 1 :(得分:2)

online tools允许您至少选择不同的汇编方言,但是我看不到任何支持Xeon Phi或Skylake的东西。但是,英特尔C ++和Fortran编译器支持cross-compiling用于这些其他体系结构。看来您使用的是Windows,并且直接受支持。

另一种方法是租用一个本机支持AVX-512的AWS EC2 C5实例进行播放。出于学习目的,对于预留实例,该操作的价格低至$ 0.085 / hr,如果您可以采用Spot定价,则可以按$ 0.0185 / hr进行。