CUDA-Python: Как запустить ядро CUDA на Python (Numba 0.25)?
Не могли бы вы помочь мне понять, как писать ядра CUDA на Python? AFAIK, numba.vectorize может выполняться на cuda, cpu, параллельном (multi-cpus), в зависимости от цели. Но target='cuda' требует настроить ядра CUDA.
Основная проблема заключается в том, что многие примеры, ответы в Интернете связаны с устаревшей библиотекой NumbaPro, поэтому трудно следовать таким, как не обновленные WIKI, особенно если вы новичок.
Я имею:
- последний Анаконда (v2)
- последняя Нумба (v0.25)
- последний инструментарий CUDA (v7)
Вот ошибка, которую я получаю:
numba.cuda.cudadrv.driver.CudaAPIError: 1 Вызов cuLaunchKernel приводит к CU DA_ERROR_INVALID_VALUE
import numpy as np
import time
from numba import vectorize, cuda
@vectorize(['float32(float32, float32)'], target='cuda')
def VectorAdd(a, b):
return a + b
def main():
N = 32000000
A = np.ones(N, dtype=np.float32)
B = np.ones(N, dtype=np.float32)
start = time.time()
C = VectorAdd(A, B)
vector_add_time = time.time() - start
print "C[:5] = " + str(C[:5])
print "C[-5:] = " + str(C[-5:])
print "VectorAdd took for % seconds" % vector_add_time
if __name__ == '__main__':
main()
1 ответ
Код, как опубликовано, является правильным и будет работать в системе Python 2 Numbapro/Accelerate без ошибок.
Вероятно, что конкретная система, используемая для запуска кода, была не очень большой по объему и поражала сторожевой таймер драйвера дисплея или ошибку свободной памяти с 32 миллионами векторов элементов. Уменьшение размера входных данных позволило правильно выполнить код.
[Этот ответ собран из комментариев и добавлен в качестве записи вики сообщества, чтобы убрать этот вопрос из списка без ответа]