【问题标题】:AMD APP OpenCL SDK on Intel英特尔上的 AMD APP OpenCL SDK
【发布时间】:2012-08-12 05:06:36
【问题描述】:

我已经看到 AMD APP SDK 示例在只有 Intel CPU 的机器上工作。 这怎么可能发生?编译器如何针对不同的机器架构? 我不需要 Intel 的一套编译器就可以在 Intel CPU 上运行代码吗?

我认为如果我们必须在特定硬件上运行 OpenCL 应用程序,我必须使用设备的供应商特定编译器(重新)编译它。

我的理解哪里错了?

【问题讨论】:

  • 好吧,不要戴上你的派对帽子,APP SDK 的 CPU 编译器非常糟糕,几乎是英特尔官方 OpenCL 编译器的八倍。所以它几乎是一个通用编译器。

标签: opencl gpu x86-64


【解决方案1】:

首先,OpenCL 是为在 CPU 和 GPU 上工作而构建的。您可以在任一类型的设备上编译和运行相同的源代码。但是,CPU 代码很可能对 GPU 来说不是最佳的,反之亦然。

AMD 硬件占 x86/x64 CPU 总数的 7% - 14%。因此,AMD 必须为 AMD 和 Intel 芯片开发相关的编译器。 AMD 有为这两组芯片开发编译器的历史。相反,英特尔开发的编译器要么不能在 AMD 芯片上工作,要么不能很好地工作。这并不奇怪。

使用 OpenCL,AMD APP SDK 是最灵活的,它可以在 AMD 和 Intel CPU 和 AMD GPU 上运行良好。英特尔的 OpenCL SDK 甚至没有安装在 AMD x86 H/W 上。

如果您将 OpenCL 程序编译为二进制文件,您可以保存并重复使用它,只要它与创建它的 OpenCL 平台和设备相匹配。因此,如果您为一台设备编译并在另一台设备上使用,您很可能会出错。

【讨论】:

    【解决方案2】:

    OpenCL 的强大之处在于抽象底层硬件并提供海量、并行和异构的计算能力。

    一些 SDK 和平台提供了一些特定的功能来“优化”代码,老实说,我认为这些功能只是营销,它们引入了样板代码,从而降低了应用程序的可移植性。

    还有一些伪新技术只是 OpenCL 的包装器,或者它们在概念上非常相似,例如 Intel quick sync。

    关于英特尔,我应该说他们最初支持所有 iCore 代甚至一些 C2D,现在新的 SDK 只支持第 3 代 iCore,我不明白他们的策略,可能英特尔是最后一个如果您想采用 OpenCL 并针对尽可能多的受众,请选择their SDK doesn't seems to be really good at all。

    坚持标准,您将避免可能的法律和性能问题,并且您的代码也将更具可移植性。

    【讨论】:

    • 我同意我玩过英特尔 OpenCL 示例,它们更多的是 DirectX 示例,更少的是 openCL 示例,但是您应该也可以在 AMD 硬件或 Nvidia 硬件上运行英特尔示例。
    【解决方案3】:

    最重要的是,AMD SDK 包含一个编译器,用于针对 OpenCL 的 x86 CPU。这意味着即使您运行的是 Intel CPU,生成的代码也会在其上运行。这与编译 C 程序以在 x86 CPU 上运行的概念相同:它适用于 Intel 和 AMD CPU(或任何实现 x86 指令集的 CPU)。

    供应商的编译器可能具有特定的优化,例如 user827992 提到的,但根据我的经验,在 Intel CPU 上运行时 AMD 的 CPU 编译器的性能并没有那么差。我还没有尝试过英特尔的 OpenCL 实现。

    确实,对于某些(也许是未来的大多数)硬件,只有供应商的编译器会支持它。 AMD 的 SDK 不会构建将在 NVIDIA 卡上运行的代码,反之亦然。 CPU 恰好是一种特殊情况,因为基本指令集部署如此广泛,以至于 CPU 编译器可以在您可能接触到的大多数机器上运行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多