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
Répondre
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.
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
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.
MATLAB utilise vraisemblablement plusieurs threads au niveau de la machine virtuelle. – dnbwise
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.
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.
- 1. Optimiser CUDA avec poussée dans une boucle
- 2. CUDA et STL vector
- 3. Problème dans Matlab Préallouer avec un complexe pour boucle
- 4. Développement CUDA et web
- 5. CUDA et Dev C++
- 6. Intégration XCode et CUDA
- 7. comment optimiser le programme cuda pour obtenir de meilleures performances?
- 8. Tutoriel pour CUDA + OpenGl
- 9. cuda float point précision
- 10. Terrain dans une boucle dans Matlab
- 11. comparaison Matlab vs CUDA corrélation et réduction sur un tableau 2D
- 12. cmake, gcc, cuda et -m32
- 13. CUDA distorsion de chaîne et cycles d'horloge
- 14. Structure de projet CUDA
- 15. multiplication matricielle en cuda
- 16. allocation de filetage CUDA
- 17. CUDA - Erreur de bus
- 18. Pour les boucles dans Matlab
- 19. mémoire CUDA trouble
- 20. CUDA plugin dlopen
- 21. MySQL et Matlab
- 22. CUDA: Déboguer avec -deviceemu et gdb
- 23. pression de registre cuda
- 24. MATLAB parallèle et consignation
- 25. Utilisation de macros pour définir des constantes pour CUDA
- 26. Matlab et MrVista
- 27. pour la boucle et si la boucle refuse d'imprimer une varriable en dehors de la boucle?
- 28. Conseils pour un débutant C, CUDA, & ANN?
- 29. Griddata3 de MATLAB pour NumPy?
- 30. Comment additionner des valeurs dans une boucle for dans Matlab?
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