我发现AMD APP SDK示例可以在只有英特尔CPU的机器上运行。这是如何实现的?编译器如何针对不同的机器架构进行目标编译?我不需要使用英特尔的编译器来在英特尔CPU上运行代码吗?
我认为,如果我们要在特定硬件上运行OpenCL应用程序,则必须使用设备供应商的特定编译器进行(重新)编译。
我的理解哪里出了问题?
OpenCL 的强大之处在于抽象底层硬件并提供大规模、并行和异构计算能力。
一些 SDK 和平台提供了一些特定的功能来“优化”代码,但我认为这些功能只是营销手段,它们引入样板代码,使应用程序不太可移植。
还有一些伪新技术,它们只是 OpenCL 的包装器,或者在概念上非常相似,比如 Intel 快速同步。
关于 Intel,我必须说,起初他们支持所有 iCore 代和一些 C2D,现在新的 SDK 只支持第三代 iCore,我真的不明白他们的策略,可能 Intel 是最后的选择,如果你想采用 OpenCL 并面向尽可能广泛的受众,同时 他们的 SDK 看起来并不是很好。
坚持标准,您将避免可能的法律和性能问题,您的代码也将更具可移植性。