Установил на убунту OpenCL, PyOpenCL, AMD APP SDK, все зависимости - по идее, должно работать.
Запускаю тестовый примерчик
отсюда:
import numpy as np
import pyopencl as cl
a_np = np.random.rand(50000).astype(np.float32)
b_np = np.random.rand(50000).astype(np.float32)
ctx = cl.create_some_context()
queue = cl.CommandQueue(ctx)
mf = cl.mem_flags
a_g = cl.Buffer(ctx, mf.READ_ONLY | mf.COPY_HOST_PTR, hostbuf=a_np)
b_g = cl.Buffer(ctx, mf.READ_ONLY | mf.COPY_HOST_PTR, hostbuf=b_np)
prg = cl.Program(ctx, """
__kernel void sum(__global const float *a_g, __global const float *b_g, __global float *res_g) {
int gid = get_global_id(0);
res_g[gid] = a_g[gid] + b_g[gid];
}
""").build()
res_g = cl.Buffer(ctx, mf.WRITE_ONLY, a_np.nbytes)
prg.sum(queue, a_np.shape, None, a_g, b_g, res_g)
res_np = np.empty_like(a_np)
cl.enqueue_copy(queue, res_np, res_g)
# Check on CPU with Numpy:
print(res_np - (a_np + b_np))
print(np.linalg.norm(res_np - (a_np + b_np)))
Получаю ошибку:
Traceback (most recent call last):
File "test.py", line 10, in <module>
ctx = cl.create_some_context()
File "/usr/lib/python2.7/dist-packages/pyopencl/__init__.py", line 767, in create_some_context
platforms = get_platforms()
pyopencl.LogicError: clGetPlatformIDs failed: platform not found khr
По всем запросам, гугл говорит, что это баг nvidia, и как его можно исправить.
Но у меня то AMD!
Совершенно не знаю, с какого конца подойти к вопросу. Прошу помощи. В чем может быть проблема на AMD?
--- Вопрос решен. Ниже приведены приблизительные шаги, после которых все заработало. ---Спасибо Влад Гвер за помощь!
Инструкцию брал
здесь. Но пакеты ставил немного иначе:
- Скачал AMD-APP-SDK отсюда. Брал версию 2.9.1, так как 3.0 на этот момент в бэте, и у меня с ней не вышло. Установил
- Сделал
sudo apt-get -f install
, чтобы удовлетворить потерянные зависимости
- Сделал
sudo apt-get install linux-headers-generic fglrx fglrx-amdcccle
, чтобы установить драйвер AMD из репки, так как драйвер с сайта у меня не встал, по всей видимости из-за разногласий с версией fglrx
- Сделал
sudo apt-get install python-pyopencl
- Ребут
- Тестовый пример со странички PyOpenCL работает