Quand utiliser OpenCL?
Avoir trébuché sur ce fil du forum, point de produits plus rapidement sur le cpu que sur gpu en utilisant OpenCLje me suis rappelé de nouveau, qu'il y a des instances, qui se ressemblent, ils sont faits pour OpenCL*, mais où ils sont utilisés, OpenCL n'est pas fourni avec un gain. c'est à dire j'ai aussi un kmeans mise en œuvre à l'aide de pyopencl code qui est plusieurs fois plus rapide qu'un simple code python, mais encore plusieurs fois plus rapide que la fonction scipy pour kmeans.
Alors, comment décider quand utiliser OpenCL?
- Quelle carte graphique avez-vous besoin? Comment " mieux que le cpu la carte graphique. Est Quadro FX 580 vs i7 860 assez?
- Comment big le problème? Avez-vous besoin de millions de multiplications pour obtenir quelque chose ou sont plusieurs centaines suffisant?
- Combien l'optimisation d'un même "de simples" de l'algorithme comme kmeans ou le produit scalaire est nécessaire de faire OpenCL en vaut la peine?
Ou est-ce l'un de ces triangles des cas, où vous ne peuvent (ou doivent) choisir deux des trois coins pour le faire fonctionner?
problem size /\ / \ / \ / \ /________\ GPU/CPU optimization
Je sais, que j'ai utilisé un peu trop audacieux de la langue pour le titre et les questions. Je vais le changer, si je peux penser à un plus appropriés.
Grâce.
* simple le fonctionnement de la matrice comme le produit scalaire, kmeans ou de la matrice de multiplications
source d'informationauteur Framester
Vous devez vous connecter pour publier un commentaire.
La vraie clé est de savoir si votre algorithme a beaucoup d'inhérente parallélisation où vous pouvez à la main sur un ensemble de données et ont une grande quantité de traitement parallèle arriver sur elle. Rappelez-vous qu'un GPU peut avoir de nombreux cœurs, mais ils seulement d'horloge .5-1 GHZ. La force est dans le traitement de grandes quantités d'opérations en parallèle pour obtenir de très haut débit.
Envisager de débit qu' (données calculées * fréquence * les étapes du pipeline) - donc, il va y avoir un compromis d'aller à dire 1/6ème de la fréquence avec l'un de ces noyaux GPU, mais probablement plus de 6* le nombre de cœurs (les étapes du pipeline).
Bien sûr, il y a une surcharge supplémentaire de la CPU <-> GPU de la barrière, et aussi votre algorithme pourrait aboutir à plusieurs cycles d'horloge GPU pour calculer..
Quelques éléments de réponse:
Comme chaque technologie de la décision, la réponse dépend de l'objectif à atteindre. Informations sur la prise en charge d'OpenCL capacités des Gpu peuvent être trouvés sur le fournisseur de pages. Attention: Pas tous les Gpu support OpenCL, et pas tous les Gpu de soutien en charge OpenCL double précision. Vous pourriez aussi penser à vos clients/clients qui pourraient ne pas avoir un OpenCL capable de l'environnement.
La programmation GPGPU (OpenCL et CUDA) sont adaptés pour (presque) tous types de problèmes d'Algèbre Linéaire. Ces problèmes sont assez facile à paralléliser et fit donc facilement sur un environnement parallèle comme Gpu. Tous les problèmes qui doivent aller sur le GPU doivent pas être trop complexes et parallèle conçu. Cela dépend vraiment de vous domaine du problème.
De l'autre côté, vous devez payer attention à certains gains d'OpenCL. On a besoin de copier des données à partir de la RAM pour le GPU et à l'arrière, ce qui conduit à des retards. Vous devriez faire des mesures de temps de différentes tailles de problème sur le CPU et le GPU. Il vous sera facile de voir quand la rupture est atteint. J'ai essayé une multiplication de matrice de l'ATLAS de la bibliothèque sur le CPU Opteron X64 2x2600 et GPU Geforce 8600GTS. La multiplication de matrice n'était que de deux matrices de dimensions NxN. La pause evens a pour N-peu-près de 100. Ce résultat dépend fortement de la CPU et le GPU utilisé et peut être totalement différent sur d'autres matériels.
GPU sont tout au sujet de traitement de données intensif calculs lieu. Vous pouvez décharger le CPU par le portage de votre calcul intensif tâches de GPU. Les résultats que vous recevez sont à vous depuis le GPU n'est qu'un outil, il exige de "corriger" l'utilisation.