0

我在笔记本电脑上安装了 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 平台。

所以我的问题是:

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

谢谢你。

4

1 回答 1

0

我找到了一种在平台之间切换的快速而简单的方法:我只需将 ICD 文件重命名/etc/OpenCL/vendors/为“禁用”它,这样就只会检测到我想要的平台(可以用 来检查clinfo)。

例如$ sudo mv /etc/OpenCL/vendors/pocl.icd /etc/OpenCL/vendors/pocl.icd_使用 intel64(另一个可用的 CPU 平台)而不是 pocl,反之亦然使用 pocl 而不是 intel64。

如果有人有更干净和程序化的方式来解决这个问题,欢迎他们!

于 2018-10-03T07:46:39.297 回答