Compilation 我可以将OpenCL代码编译成普通的、不使用OpenCL的二进制文件吗?

Compilation 我可以将OpenCL代码编译成普通的、不使用OpenCL的二进制文件吗?,compilation,inline,opencl,sse,avx,Compilation,Inline,Opencl,Sse,Avx,我正在为我的目的评估OpenCL。我突然想到,你不能假设它在Windows或Mac上是开箱即用的,因为: Windows需要一个OpenCL驱动程序(当然可以安装) MacOS仅在MacOS>=10.6上支持OpenCL 因此,我必须分别对FPU/SSE/AVX代码和OpenCL进行编码,以生成两个二进制文件:一个不支持FPU/SSE/AVX,另一个支持OpenCL 如果我能在compiletime将OpenCL编译成SSE/AVX,然后在其中不包含OpenCL的情况下发布二进制文件,那就更

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

  • Windows需要一个OpenCL驱动程序(当然可以安装)
  • MacOS仅在MacOS>=10.6上支持OpenCL
因此,我必须分别对FPU/SSE/AVX代码和OpenCL进行编码,以生成两个二进制文件:一个不支持FPU/SSE/AVX,另一个支持OpenCL

如果我能在compiletime将OpenCL编译成SSE/AVX,然后在其中不包含OpenCL的情况下发布二进制文件,那就更好了。这样我就不需要FPU/SSE/AVX的单独实现了

有办法吗

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


因此,尽管这不是您一直要求的,但至少在Windows上,您的应用程序可能更容易附带intelocl.dll及其依赖项(如果许可证允许;我没有检查),从那里动态加载OpenCL函数入口点,动态编译OpenCL内核以进行汇编,并使用OpenCL运行时执行。

Hmm,这听起来太复杂了。。。我想用自己的C/C++代码来替换OpenCL库函数……重新实现供应商的OpenCL实现,即使只是部分实现,而且没有包含的编译器,也可能需要大量的工作。我想你最好还是简单地重新分配你所依赖的OpenCL运行时,类似于我上面所建议的。mh,不确定,但OpenCL代码对我来说是C兼容的,所以使用一点预处理器魔法。。。?我仍然不明白,如果您将它限制为单线程标量代码,这将是一个多大的问题。。。不OpenCL有很多(矢量)数据类型和C/C++不具备的关键字。但是,如果您对单线程代码进行了(相当大的)限制,那么您的问题可以归结为从高级语言创建SIMD代码。在这种情况下,请使用一个好的自动矢量化编译器(如英特尔编译器)或一个像IPP这样的库,它为不同的CPU算法提供了最佳的代码路径。