Выбор платформы процессора OpenCL в Compute.scala
Я установил 3 разных среды выполнения OpenCL на свой ноутбук:
- NVIDIA CUDA OpenCL на графических процессорах
- Intel OpenCL SDK на процессоре
- POCL (также на процессоре)
В результате, вот часть результата 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
Теперь я хочу использовать библиотеку Scala Compute.scala для выполнения вычислений NDArray на GPU и CPU (на основе библиотеки LWJGL).
Тип устройства выбирается с помощью следующей строки импорта в начале программы:
import com.thoughtworks.compute.gpu._ // for GPU
// OR
import com.thoughtworks.compute.cpu._ // for CPU
После быстрой проверки мой код работает нормально с обоими типами устройств. Тем не менее, как я должен знать, какая платформа работает при выборе процессора? Это платформа Intel OpenCL или POCL?
Глядя на код библиотеки, я подозреваю, что она просто выбирает первую платформу ЦП в списке платформ.
линия
with OpenCL.UseAllCpuDevices
( https://github.com/ThoughtWorksInc/Compute.scala/blob/742d595e5eb56f4051edfc310f64e0f9dbab5ac1/cpu/src/main/scala/com/thoughtworks/compute/cpu.scala)линия
platformIds.collectFirst { ...
( https://github.com/ThoughtWorksInc/Compute.scala/blob/742d595e5eb56f4051edfc310f64e0f9dbab5ac1/OpenCL/src/main/scala/com/thoughtworks/compute/OpenCL.scala)
Итак, мои вопросы:
- Как узнать, какая платформа процессора используется?
- Как выбрать платформу, которую я хочу использовать в Compute.scala?
- Возможно, необходимо "отключить" одну из платформ. Если это так, как я могу это сделать?
Спасибо.
1 ответ
Я нашел быстрый и грязный способ переключения между платформами: я просто переименовал файл ICD в /etc/OpenCL/vendors/
"отключить" его, чтобы была обнаружена только нужная платформа (можно проверить с помощью clinfo
).
Например $ sudo mv /etc/OpenCL/vendors/pocl.icd /etc/OpenCL/vendors/pocl.icd_
использовать intel64 (другую доступную платформу процессора) вместо pocl, и наоборот для использования pocl вместо intel64.
Если у кого-то есть более чистый и программный способ решить эту проблему, его приветствуют!