2010-12-09 6 views
5

Je vais essayer d'optimiser du code écrit en MATLAB, en utilisant CUDA. J'ai récemment commencé à programmer CUDA, mais j'ai une idée générale de son fonctionnement. Donc, disons que je veux ajouter deux matrices ensemble. En CUDA, je pourrais écrire un algorithme qui utiliserait un thread pour calculer la réponse pour chaque élément de la matrice de résultat. Cependant, cette technique n'est-elle probablement pas similaire à ce que MATLAB fait déjà? Dans ce cas, l'efficacité ne serait-elle pas indépendante de la technique et attribuable uniquement au niveau matériel?CUDA et MATLAB pour l'optimisation de boucle

+0

Il pourrait être intéressant de comparer la solution de The MathWorks avec des outils tiers et CUDA. http://developer.nvidia.com/object/matlab_cuda.html – zellus

Répondre

3

La technique pourrait être similaire mais rappelez-vous qu'avec CUDA vous avez des centaines de threads fonctionnant simultanément. Si MATLAB utilise des threads et que ces threads s'exécutent sur un noyau quadruple, vous n'obtiendrez que 4 threads par cycle d'horloge alors que vous pourriez réaliser quelques centaines de threads à exécuter sur CUDA avec ce même cycle d'horloge. Pour répondre à votre question, OUI, l'efficacité de cet exemple est indépendante de la technique et attribuable uniquement au matériel.

+0

Je ne serais pas du tout surpris de voir une accélération - en fait, attendez-vous à ce que la taille de l'entrée en vaille la peine. Mais, mon point est que l'algorithme lui-même (c'est-à-dire le calcul de l'addition pour chaque élément en parallèle) ne contribue pas à l'accélération, indépendant du matériel. – dnbwise

1

La réponse est sans équivoque oui, toutes les efficacités sont de niveau matériel. Je ne sais pas exactement comment fonctionne matlab, mais l'avantage de CUDA est que plusieurs threads peuvent être exécutés simultanément, contrairement à matlab. Sur une note de côté, si votre problème est petit, ou nécessite de nombreuses opérations d'écriture en lecture, CUDA sera probablement seulement un mal de tête supplémentaire.

+0

MATLAB utilise vraisemblablement plusieurs threads au niveau de la machine virtuelle. – dnbwise

0

CUDA a un support officiel pour matlab.

[lien nécessaire]

Vous pouvez utiliser des fichiers pour fonctionner sur Mex GPU de Matlab. Le goulot d'étranglement est la vitesse à laquelle les données sont transférées de CPU-RAM à GPU. Donc, si le transfert est minimisé et fait en gros morceaux, l'accélération est grande.

0

Pour des choses simples, il est préférable d'utiliser le support gpuArray dans le Matlab PCT. Vous pouvez le vérifier ici http://www.mathworks.de/de/help/distcomp/using-gpuarray.html

Pour des choses comme l'ajout de gpuArrays, multiplications, mins, maxs, etc., l'implémentation utilisée tend à être OK. J'ai découvert que pour faire des choses comme des opérations par lots de petites matrices comme abs (y-Hx).^2, vous feriez mieux d'écrire un petit noyau qui le fait pour vous.