Si l'on jette un regard sur le code multithread suivant, où une fonction kernel
est définie, qui ajoutera un vecteur en parallèle, on peut voir quelques similarités à noyau CUDA/OpenCL - tels que:Puisque les applications multithread en python sont très similaires à opencl/cuda - est-il possible de porter l'application vers le multithreading GPU?
- Vous avez besoin un identifiant de fil/kernel - id pour aborder le vecteur
- Il n'y a pas de valeur de retour, puisque vous écrivez à la mémoire fournie
- vous devez allouer la mémoire de la sortie avant la main
de filetage importation Discussion
def kernel(i,A,B,C):
"""
Does a vector addition
@param A output vector
@param B input vector
@param C input vector
"""
A[i] = B[i] + C[i]
vec_length = 1000
#Allocate memory
A = [None] * vec_length
B = [1] * vec_length
C = [2] * vec_length
processes = []
for i in range(0,vec_length):
processes.append(Thread(target=kernel,args=[i,A,B,C]))
processes[i].start()
for i in range(0,vec_length):
processes[i].join()
print(A)
Ma question est, s'il existe un moyen facile d'exporter le parallélisme du code pour GPU. Bien sûr, pas en écrivant CUDA/OpenCL - mais en utilisant un outil existant pour ce problème ou en créant un tel outil si c'est possible.
Bien sûr, cela peut ne pas fonctionner pour les applications avancées. Je suis au courant de PyCuda - cependant cela entraînera la réécriture de l'application.