在Compute.scala中选择OpenCL CPU平台

时间:2018-09-25 08:37:21

标签: scala opencl cpu lwjgl pocl

我在笔记本电脑上安装了3种不同的OpenCL运行时:

  • GPU上的NVIDIA CUDA OpenCL
  • CPU上的Intel 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 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平台。

所以我的问题是:

  • 我如何知道正在使用哪个CPU平台?
  • 如何在Compute.scala中选择要使用的平台?
  • 也许有必要“禁用”其中一个平台。如果是这样,我该怎么办?

谢谢。

1 个答案:

答案 0 :(得分:0)

我发现了一种在平台之间切换的快捷方法:我只是将/etc/OpenCL/vendors/中的ICD文件重命名为“禁用”它,以便仅检测到我想要的平台(可以使用{ {1}}。

例如,clinfo使用intel64(另一个可用的CPU平台)代替pocl,反之亦然,使用pocl代替intel64。

如果有人有更干净,更编程的方式来解决此问题,欢迎他们!