我在笔记本电脑上安装了3种不同的OpenCL运行时:
结果,这是clinfo
结果的一部分:
$ clinfo
Number of platforms 3
Platform Name Portable Computing Language
Platform Vendor The pocl project
Platform Version OpenCL 1.2 pocl 1.1 None+Asserts, LLVM 6.0.0, SPIR, SLEEF, DISTRO, POCL_DEBUG
...
Platform Name Intel(R) OpenCL
Platform Vendor Intel(R) Corporation
Platform Version OpenCL 1.2 LINUX
...
Platform Name NVIDIA CUDA
Platform Vendor NVIDIA Corporation
Platform Version OpenCL 1.2 CUDA 9.0.282
现在,我想使用Compute.scala Scala library在GPU和CPU(基于LWJGL库)上执行NDArray计算。
在程序的开头使用以下导入行选择设备类型:
import com.thoughtworks.compute.gpu._ // for GPU
// OR
import com.thoughtworks.compute.cpu._ // for CPU
经过快速测试,我的代码在两种设备类型上均可正常运行。但是,选择CPU时我应该如何知道WHICH平台正在运行?是Intel OpenCL平台还是POCL?
通过查看库的代码,我怀疑它只是在平台列表中选择了第一个CPU平台。
第with OpenCL.UseAllCpuDevices
行(https://github.com/ThoughtWorksInc/Compute.scala/blob/742d595e5eb56f4051edfc310f64e0f9dbab5ac1/cpu/src/main/scala/com/thoughtworks/compute/cpu.scala#L109)
第platformIds.collectFirst { ...
行(https://github.com/ThoughtWorksInc/Compute.scala/blob/742d595e5eb56f4051edfc310f64e0f9dbab5ac1/OpenCL/src/main/scala/com/thoughtworks/compute/OpenCL.scala#L363)
所以我的问题是:
谢谢。
答案 0 :(得分:0)
我发现了一种在平台之间切换的快捷方法:我只是将/etc/OpenCL/vendors/
中的ICD文件重命名为“禁用”它,以便仅检测到我想要的平台(可以使用{ {1}}。
例如,clinfo
使用intel64(另一个可用的CPU平台)代替pocl,反之亦然,使用pocl代替intel64。
如果有人有更干净,更编程的方式来解决此问题,欢迎他们!