我想在一个系统中一起使用2个OpenCL运行时(在我的例子中是AMD和Nvidia,但这个问题非常通用).
我知道我可以用任何SDK编译我的程序.但是在运行程序时,我需要提供libOpenCL.so.我如何提供两个运行时的库,以便在我的OpenCL程序中看到3个设备(AMD CPU,AMD GPU,Nvidia GPU)?
我知道它一定是可能的,但是我没有找到关于如何为linux做这个的描述.
非常感谢Tomas
你没有想到它.SDK不是由应用程序提供的,并且不需要运行已编译的程序.OpenCL的运行时间由客户端系统提供的,这是什么让你的程序平台和设备的使用clGetPlatformIDs
和clGetDeviceIDs
.
如果用户没有Nvidia显卡,您根本无法在他的系统上使用Nvidia平台和设备,因为他没有Nvidia OpenCL运行时或硬件.
所有不同的OpenCL SDK都为您提供特定于供应商的扩展,然后供应商运行时可以理解这些扩展.
Khronos OpenCL工作组定义了一个ICD层(可安装的客户端驱动程序),允许在系统上安装多个供应商驱动程序.应用程序通过ICD层访问供应商驱动程序.有关更多详细信息,请参阅cl_khr_icd.txt.
史密斯和托马斯的答案是正确的;这只是对该信息的扩展:当您枚举 OpenCL 平台时,您将为每个已安装的驱动程序获得一个平台。在每个平台中,您都可以枚举设备。AMD 和 Intel 驱动程序还公开 CPU 设备。因此,在完全填充的计算机上,您可能会看到 AMD 平台(具有 CPU 和 GPU 设备)、NVIDIA 平台(具有 GPU 设备)和 Intel 平台(具有 CPU 和 GPU 设备)。您的代码会在您想要使用的任何设备上创建一个上下文,以及一个或多个命令队列来为它们提供工作。您可以让他们都忙于工作,但只能在同一平台的设备之间共享数据缓冲区。要跨平台共享数据,必须占用中间的 CPU 内存。
归档时间: |
|
查看次数: |
3029 次 |
最近记录: |