我正在使用Xcode(版本5.3)将OpenCL内核编译为bitcode,如WWDC 2013会话508中所述。
Xcode根据其目标架构生成4个不同的文件,每个文件都有不同的扩展名。
扩展名为:cl.gpu_32.bc,cl.gpu_64.bc,cl.x84_64.bc,cl.i386.bc
在会话508中,他们只加载一个文件(具有cl.gpu_32.bc扩展名的文件并使用它)。
是否可以生成支持与上下文关联的所有设备的单个cl_program?
我如何知道每个可用设备使用哪种架构?
读取所有文件并生成单个cl_program的示例代码非常有用。
答案 0 :(得分:1)
Apple提供的示例代码涵盖了加载特定于平台的bitcode: https://developer.apple.com/library/mac/samplecode/OpenCLOfflineCompilation/Introduction/Intro.html#//apple_ref/doc/uid/DTS40011196
来自说明:
此示例演示了开发人员如何将OpenCL脱机使用 编译器将其人类可读的OpenCL源文件转换为 可运送的bitcode。它包含一个演示的Makefile示例 如何调用编译器,以及一个自包含的OpenCL程序 展示了如何从生成的bitcode构建程序。例子 介绍了在64位和32位CPU设备上使用bitcode的情况 作为32位GPU设备。
readme涵盖CLI参数,单文件C程序包含大量解释。
答案 1 :(得分:1)
似乎Apple示例代码(由Weichsel引用),所有需要的是使用clGetDeviceInfo获取CL_DEVICE_ADDRESS_BITS和CL_DEVICE_TYPE_GPU以区分所有可能的不同架构。