1

我正在为我的目的评估 OpenCL。我突然想到,你不能假设它在 Windows 或 Mac 上开箱即用,因为:

  • Windows 需要一个 OpenCL 驱动程序(当然,可以安装)
  • MacOS 仅在 MacOS >= 10.6 上支持 OpenCL

因此,我必须分别编写 FPU/SSE/AVX 代码和 OpenCL 以生成两个二进制文件:一个不支持 OpenCL,一个支持 OpenCL。

如果我可以在编译时将 OpenCL编译成 SSE/AVX,然后发布一个没有OpenCL的二进制文件,那就更好了。这样我就不需要为 FPU/SSE/AVX 单独实现了!

有没有办法做到这一点?

干杯,-克莱门斯

4

1 回答 1

2

实现此目的的一种方法是在您的开发机器上安装英特尔 OpenCL SDK,并使用包含的 OpenCL 离线编译器工具为您的 OpenCL 内核生成汇编代码,并将该汇编代码直接编译/链接到您的应用程序。但是,为了手动调用生成的汇编代码,找出正确的调用约定等可能需要一些工作,然后您自己负责将您的工作分成多个线程。

因此,尽管这不是您所要求的,但至少在 Windows 上,使用 intelocl.dll 及其依赖项(如果许可证允许;我没有检查)可能更容易发布您的应用程序,动态加载 OpenCL 函数条目从那里开始,将您的 OpenCL 内核即时编译为 Assembly 并使用 OpenCL 运行时执行它。

于 2012-01-09T10:14:39.923 回答