我在笔记本上安装了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库在GPU和CPU上执行NDArray计算(基于LWJGL库)。
在程序开始时使用以下导入行选择设备类型:
import com.thoughtworks.compute.gpu._ // for GPU
// OR
import com.thoughtworks.compute.cpu._ // for CPU经过快速测试,我的代码对这两种设备类型都运行良好。然而,在选择CPU时,我如何知道哪个平台在运行呢?这是英特尔的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)所以我的问题是:
谢谢。
发布于 2018-10-03 07:46:39
我找到了一种快速切换平台的方法:我只需在/etc/OpenCL/vendors/中重命名ICD文件以“禁用”它,以便只检测到我想要的平台(可以用clinfo检查)。
例如,$ sudo mv /etc/OpenCL/vendors/pocl.icd /etc/OpenCL/vendors/pocl.icd_使用intel64 (另一个可用的CPU平台)来代替intel64,反之亦然。
如果有人有一个更干净和程序化的方式来解决这一问题,他们是受欢迎的!
https://stackoverflow.com/questions/52493900
复制相似问题