J'essaye de tester l'efficacité de l'utilisation du @vectorize decorator du module Python Numba pour accélérer un extrait de code pertinent pour mon code actuel. J'utilise un extrait de code fourni dans CUDAcast # 10 disponible here et ci-dessous:Gain de vitesse négatif en utilisant Numba Vectorize target = 'cuda'
import numpy as np
from timeit import default_timer as timer
from numba import vectorize
@vectorize(["float32(float32, float32)"], target='cpu')
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 %f seconds" % vectoradd_time)
if __name__ == '__main__':
main()
Dans la démo dans le CUDAcast, le démonstrateur obtient un gain de vitesse 100x en envoyant la grande équation de tableau à la gpu via le @ vectoriser le décorateur. Cependant, quand je mets la cible de @vectorize au gpu:
@vectorize(["float32(float32, float32)"], target='cuda')
... le résultat est 3-4 fois plus lent. Avec target = 'cpu' mon temps d'exécution est 0.048 secondes; avec target = 'cuda' mon temps d'exécution est 0.22 secondes. J'utilise un ordinateur portable DELL Precision avec processeur Intel Core i7-4710MQ et GPU NVIDIA Quadro K2100M. La sortie de nvprof en cours d'exécution (outil de profil NVIDIA) indique que la majorité du temps est consacrée à la gestion de la mémoire (attendue), mais même l'évaluation de la fonction prend plus de temps sur le GPU que sur l'UC. Évidemment, ce n'est pas le résultat que j'espérais, mais est-ce dû à une erreur de ma part ou est-ce raisonnable en fonction de mon matériel et de mon code?
Roman, merci pour le 'bilan de santé'. J'apprécie aussi votre code @ cuda.jit. Je suis nouveau à Numba et CUDA, donc ce sera un bon prochain chemin pour moi d'explorer! Pouvez-vous ajouter à votre message quel matériel vous utilisez (processeur, GPU, etc.)? – blrmkrAE