使用Intel® Software Development Emulator(简称SDE),在支持未来指令集的模拟CPU上运行可执行文件。它是一个免费软件(不是开源的,但可以免费下载),适用于Linux、Windows和OS X操作系统。
https://software.intel.com/zh-cn/articles/debugging-applications-with-intel-sde提供了Windows或Linux系统下使用SDE进行调试的步骤说明:SDE可以作为GDB远程调试,您可以运行sde -debug -- ./your-program
,然后在另一个终端中运行gdb ./your-program
并使用target remote :portnumber
连接到SDE进程,以便设置断点和单步运行。
如果QEMU已经添加了对AVX512的模拟支持,您可能也可以使用它来完成同样的事情。QEMU也可以充当GDB远程调试。
QEMU肯定有可配置的指令集设置,例如,您可以告诉它模拟一个带有AVX但没有AVX2(如Sandybridge)的x86。SDM可能也能做到这一点。
您甚至可以告诉它模拟一些在真实硬件上找不到的东西,比如AVX2但没有BMI1/2,以便验证您的CPUID检查不会假设任何暗示其他未保证的指令集。
请记住,这两个工具基本上对性能测试没有任何用处,仅用于验证矢量化的正确性。IACA 对于在SKX上的性能有所帮助,但它远非完美,并且根本不模拟内存瓶颈。(只是某些细节层次上的实际流水线。)
objdump -drwC -Mintel
或者 Agner Fog 的objconv
来将机器码转换成汇编代码。你的 CPU 不必支持 AVX512 就可以使用反汇编器,无需进行仿真或任何其他操作。或者,如果你正在编译 C 或 C++ 代码,请使用 https://godbolt.org/ 直接从编译器获取汇编输出,而无需创建可执行文件然后再反汇编它。例如 https://godbolt.org/g/YsVuAX 包含一些示例函数,以及来自 gcc、clang 和 MSVC 的编译器输出。 - Peter Cordes