英特尔上的AMD应用程序OpenCL SDK

英特尔上的AMD应用程序OpenCL SDK,opencl,gpu,x86-64,Opencl,Gpu,X86 64,我已经看到AMD应用程序SDK示例在只有Intel CPU的机器上工作。 这怎么会发生?编译器如何针对不同的机器体系结构? 在英特尔CPU上运行代码是否不需要英特尔的编译器集 我认为,如果我们必须在特定硬件上运行OpenCL应用程序,我必须使用设备的供应商特定编译器(重新)编译它 我的理解哪里错了 OpenCL的功能是抽象底层硬件,并提供大规模、并行和异构计算能力 一些SDK和平台提供了一些特定的功能来“优化”代码,老实说,我认为这些功能只是营销,它们引入了样板代码,使应用程序的可移植性降低 还

我已经看到AMD应用程序SDK示例在只有Intel CPU的机器上工作。 这怎么会发生?编译器如何针对不同的机器体系结构? 在英特尔CPU上运行代码是否不需要英特尔的编译器集

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


我的理解哪里错了

OpenCL的功能是抽象底层硬件,并提供大规模、并行和异构计算能力

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

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

关于英特尔,我应该说,起初他们支持所有的iCore代,甚至一些C2D,现在新的SDK只支持第三代iCore,老实说,我不明白他们的策略,如果你想采用OpenCL并瞄准最大可能的受众,英特尔可能是最后的选择


坚持使用该标准,您将避免可能出现的法律和性能问题,您的代码也将更具可移植性。

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

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


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

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

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

有了OpenCL,AMD应用程序SDK是最灵活的,它将在AMD、Intel CPU和AMD GPU上运行良好。英特尔的OpenCLSDK甚至没有安装在AMDx86H/W上


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

好吧,不要戴上聚会帽,APP SDK的CPU编译器非常糟糕,速度几乎是官方英特尔OpenCL编译器的八倍。所以它几乎是一个通用编译器。我同意我玩过英特尔OpenCL示例,它们更多的是DirectX示例,更少的是OpenCL示例,但是你应该能够在AMD硬件或Nvidia硬件上运行英特尔示例。