Egy kicsit érdekesebb a program, ha az adat feldolgozást vektorizáljuk, és ezzel párhuzamosítjuk.
Ehhez egy sort kell beszúrnunk az összeadást végző függvény neve elé.
@vectorize(["float32(float32, float32)"], target='cuda')
A vektorizálás hatására numba elemekre bontja sazámítást, így már nincs szükségünk a cillusra sem. Egészen pontosan a teljes kód így néz ki.
import numpy as np
from timeit import default_timer as timer
from numba import vectorize
@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)
C = np.zeros(N, dtype=np.float32)
start = timer()
C = VectorAdd(A, B)
vectoradd_time = timer() - start
print("C[:5] = " + str(C[:5]))
print("C[-5:] = " + str(C[-5:]))
print("VectorAdd took {} seconds".format(vectoradd_time))
if __name__== "__main__":
main()
Ez eredémyn egyszerűbb, gyorsabb, és a " target='cuda' " megadása miatt automatikusan CUDA GPU-n fog futni.