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 миллионами векторов элементов. Уменьшение размера входных данных позволило правильно выполнить код.

[Этот ответ собран из комментариев и добавлен в качестве записи вики сообщества, чтобы убрать этот вопрос из списка без ответа]

Другие вопросы по тегам