【问题标题】:How to test AVX-512 instructions w/o supported hardware? [closed]如何在不支持硬件的情况下测试 AVX-512 指令? [关闭]
【发布时间】:2018-08-12 01:59:33
【问题描述】:

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

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

【问题讨论】:

    标签: assembly x86 intel amd-processor avx512


    【解决方案1】:

    使用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,然后在另一个终端运行 gdb ./your-program 并使用target remote :portnumber 连接到 SDE 进程,以便您可以设置断点和单步。


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

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

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


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

    【讨论】:

    • 是的,我也想过模拟器。我可以试试。虽然它非常有限。使用调试器单步执行代码将是我的最佳解决方案。至于其他在线反汇编程序,根据我的经验,大多数运行在不支持 AVX512 的处理器上。我需要看看亚马逊或微软的 Azure 是否有支持低成本 CPU 租赁的计划。 (就像 Hans Musgrave 建议的那样。)
    • @MikeF:我的回答展示了如何使用调试器单步执行模拟代码。 (或者至少链接到关于如何在 Windows 上执行此操作的英特尔文章。我只引用了 Linux 部分,因为它是几个简单的命令。)
    • @MikeF:如果你真的只是想要一个反汇编程序,请使用objdump -drwC -MintelAgner Fog's objconv 将机器代码转换为asm 文本。 您的 CPU 无需支持 AVX512 即可让反汇编程序工作,无需仿真或任何需要。或者,如果您正在编译 C 或 C++,请使用 godbolt.org 直接从编译器获取 asm 输出,而无需创建可执行文件然后反汇编它。例如godbolt.org/g/YsVuAX 有一些示例函数,带有来自 gcc、clang 和 MSVC 的编译器输出。
    • @MikeF:您这样做是为了进行性能测试吗?你的问题没有这么说,所以一个可以在桌面上运行单步 AVX512 代码的免费模拟器对我来说似乎好多了。
    • @MikeF:正如我的回答所解释的那样,这正是您可以使用模拟器执行的操作,而无需远程桌面到云虚拟机以在那里运行调试器。这就是我学习AVX512的方式。 (实际上,我花了更多时间查看编译器生成的 asm 以了解我尝试使用内在函数的东西;我想我实际上只在 SDE 中运行过一两次。查看 NASM 接受的语法是我了解如何/何时可以的另一种方式使用屏蔽和广播负载​​,以及舍入模式覆盖。)
    【解决方案2】:

    online tools 至少允许您选择不同的程序集方言,但我没有看到任何支持 Xeon Phi 或 Skylake 的东西。但是,英特尔 C++ 和 Fortran 编译器支持 cross-compiling 用于这些附加架构。看来您使用的是 Windows,这是直接支持的。

    另外一个途径是租用一个 AWS EC2 C5 实例来玩,它本机支持 AVX-512。出于学习目的,预留实例只需 0.085 美元/小时或 0.0185 美元/小时,如果您可以接受 Spot 定价。

    【讨论】:

    • 嘿,谢谢。您的 AWS 想法听起来很有趣。虽然我以前从来没有和他们打过交道。你从哪里得到所有这些价格?还有什么是“现货定价”?
    • 定价随时间而变化,但this link 应该保持最新。 “现场”实例与“按需”实例的不同之处在于您不必立即分配机器。亚马逊使用它们来填补正常使用中的空白,并愿意提供折扣,因为总比没有好(只要这超出了他们的运营开销)。您的测试可能不需要大量资源或机器上实例之间的持久存储,因此最便宜的选项应该可以正常工作。
    • 检查您对另一个答案的评论,AWS 亚马逊,Azure 有一个与 AVX-512 类似的产品。他们的pricing 很有竞争力——没有超过现场实例,但轻松击败了 AWS 按需产品。
    • 好的,谢谢。我会尝试挖掘它。到目前为止,一切都非常混乱。让我试着把它弄清楚。我会租一个我可以安装的虚拟机,比如说,Windows,然后远程进入它,对吧?如果是这样,那将是一个好主意,因为我可以使用 Visual Studio 在其上运行远程调试器。让我感到困惑的是他们在您链接的列表中的命名。说t1.microt2.small 等等——该列表中有数百万个事物。另外我如何选择它将在哪个 CPU 上运行?
    • 那些云服务是 IMO 不必要的复杂。您可以租用一个虚拟机并能够选择它是什么类型的虚拟机(例如 Windows)。您不必安装操作系统。您需要深入研究文档以验证 CPU 类型,或者您可以相信我的话,亚马逊在 C5 实例中吹嘘 AVX512,而微软在其 Fv2 实例中吹嘘它。两家供应商都使用具有更新版本的 AVX512 指令集的 Skylake 处理器。要选择哪种类型,例如您想要的 C5 实例,您需要比较它们的其他属性,例如 RAM。最便宜的应该工作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-11
    • 1970-01-01
    • 2014-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-18
    相关资源
    最近更新 更多