没有支持AVX-512指令的硬件,如何测试AVX-512指令?

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

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

2个回答

12

使用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上的性能有所帮助,但它远非完美,并且根本不模拟内存瓶颈。(只是某些细节层次上的实际流水线。)


@MikeF:我的回答展示了如何使用调试器逐步执行模拟代码。 (或者至少链接到一篇关于在Windows上如何执行此操作的英特尔文章。我只引用了Linux部分,因为它只需要几个简单的命令。) - Peter Cordes
@MikeF:如果你只是想要一个“反汇编器”,使用 objdump -drwC -Mintel 或者 Agner Fog 的 objconv 来将机器码转换成汇编代码。你的 CPU 不必支持 AVX512 就可以使用反汇编器,无需进行仿真或任何其他操作。或者,如果你正在编译 C 或 C++ 代码,请使用 https://godbolt.org/ 直接从编译器获取汇编输出,而无需创建可执行文件然后再反汇编它。例如 https://godbolt.org/g/YsVuAX 包含一些示例函数,以及来自 gcc、clang 和 MSVC 的编译器输出。 - Peter Cordes
谢谢,彼得。不,我不仅需要一个反汇编器。(我可以从许多来源获取它们。)我想要的是在实际硬件上测试运行那些AVX512指令。我目前正在尝试在30天免费试用的Azure帐户中安装Windows 10虚拟机。如果那里没有支持AVX-512的CPU,我将更仔细地研究您建议的模拟器。我非常感谢您的所有建议! - MikeF
1
@MikeF:你是为了性能测试而这样做的吗?你的问题没有说明,所以在桌面上运行一个免费的模拟器来单步执行AVX512代码对我来说更好。 - Peter Cordes
1
@MikeF:这正是你可以通过模拟器来做到的,就像我的回答解释的那样,而不必远程桌面连接到云 VM 上运行调试器。这就是我学习 AVX512 的方法。(实际上,我花了更多时间查看用 intrinsics 尝试的编译器生成的汇编代码;我想我只是在 SDE 中实际运行了一两次。看看 NASM 接受什么语法是我学习如何/何时使用掩码和广播加载以及舍入模式覆盖的另一种方式。) - Peter Cordes
显示剩余4条评论

3
在线工具可以至少选择不同的汇编语言,但我没有看到任何支持Xeon Phi或Skylake的东西。然而,英特尔C++和Fortran编译器支持交叉编译这些额外的架构。看起来你正在使用Windows,这是直接支持的。
另一种方法是租用AWS EC2 C5实例进行学习,该实例本地支持AVX-512。为了学习目的,可以以每小时$0.085的预留实例或者以每小时$0.0185的竞价定价来完成。

嘿,谢谢。你的AWS想法听起来非常有趣。虽然我以前从未与它们打过交道。你从哪里获取所有这些价格信息?还有,“spot pricing”是什么? - MikeF
价格会随时间变化而变化,但此链接应该保持最新。 "Spot"实例与"On-Demand"实例不同之处在于您不一定会立即获得分配的机器。亚马逊使用它们来填补正常使用中的空缺,并愿意提供折扣,因为有些比没有要好(只要这些内容超过他们的运营成本)。你的测试可能不需要大量资源或在他们的机器上实例之间的持久存储,所以最便宜的选择应该可以胜任。 - Hans Musgrave
根据你在另一个答案中的评论,AWS就是亚马逊,而Azure也有一款与AVX-512相媲美的产品。他们的定价很有竞争力——虽然没有超过spot instances,但在打败AWS的按需产品方面表现出色。 - Hans Musgrave
通常免费账户仅限于一种“微型”实例,确切的术语因云服务提供商而异。这些实例通常具有足够的时间,您可以在整个月内持续免费运行它。无论如何,您只需支付您的使用量(没有月费),因此,如果您熟悉其他SIMD指令集,那么对于调试和玩耍AVX-512指令集,您可能只需不到一美元的费用。 - Hans Musgrave
我不确定他们是否会让我在接下来的30天内免费使用它,但是除了花费数小时进行设置之外,这是一种在实际(尽管是虚拟机)硬件上运行测试的方法。现在我将尝试阅读Peter Cordes在另一篇帖子中建议的Intel模拟器白皮书。也许这是一个更简单的解决方案。 - MikeF
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接