我在笔记本电脑上安装了 3 个不同的 OpenCL 运行时:
- GPU 上的 NVIDIA CUDA OpenCL
- CPU 上的英特尔 OpenCL SDK
- POCL(也在 CPU 上)
因此,这里是结果的一部分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)
所以我的问题是:
- 我如何知道正在使用哪个 CPU 平台?
- 如何选择要在 Compute.scala 中使用的平台?
- 也许有必要“禁用”其中一个平台。如果是这样,我该怎么做?
谢谢你。