Könntest du mir bitte helfen, zu verstehen, wie man CUDA-Kernel in Python schreibt? AFAIK, numba.vectorize kann durchgeführt werden auf cuda, CPU, parallel (multi-cpus), basierend auf Ziel. Aber target = 'cuda' erfordert CUDA-Kernel einrichten.CUDA-Python: Wie startet man den CUDA Kernel in Python (Numba 0.25)?
Das Hauptproblem ist, dass viele Beispiele, sind Antworten in Internet zu NumbaPro Bibliothek veraltete verwendet, so ist es schwer zu wie nicht aktualisierteWIKIs, besonders wenn Sie Neuling zu folgen.
ich habe:
- neuesten Anaconda (v2)
- neuesten Numba (V0.25)
- neuester CUDA Toolkit (v7)
Hier ist der Fehler, den ich bin bekommen:
numba.cuda.cudadrv.driver.CudaAPIError: 1 Call to cuLaunchKernel results in 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()
Es ist nichts falsch mit dem Code, den Sie geschrieben. Ich kann es ohne Fehler ausführen. Ich kann mir zwei Möglichkeiten vorstellen: (a) Ihre numba-Installation ist völlig kaputt, oder (b) Ihre GPU hat sehr wenig Speicher. Sie weisen dem Gerät drei 128-MB-Vektoren zu, wenn die GPU nicht viel Speicher hat, könnten Sie nicht mehr genügend Speicherplatz haben. Versuchen Sie, N auf etwas viel kleineres zu reduzieren und zu sehen, was passiert – talonmies
@talonmies, wow, es funktionierte mit N = 10 Millionen und scheitert mit 20 Millionen. Könnten Sie mir bitte sagen, wie Sie 3 x 128 Mb berechnet haben? Ich habe GeForce 820M, es ist Speicher ist 2 GB, glaube ich – Novitoll
32000000 * 4 = 128 MB. Sie könnten auch die Watchdog-Timer-Grenzwerte für Ihre GPU treffen, wenn es ein Display ausführt und nicht viel Rechenkapazität hat. – talonmies