OpenCL dans les tâches quotidiennes

Récemment, nous avons parlé de HSA et lors de la discussion sur les avantages de la nouvelle approche de la construction de PC, nous avons abordé un sujet aussi intéressant que GPGPU - l'informatique à usage général sur un accélérateur graphique. Aujourd'hui, les accélérateurs vidéo AMD donnent accès à leurs ressources à l'aide d'OpenCL, un framework qui fournit un système hautement parallèle programmable relativement simple et intuitif.


Aujourd'hui, les technologies OpenCL sont prises en charge par tous les principaux acteurs du marché: la possibilité de fournir des programmes avec accès à une accélération «avancée» (également gratuite, car OpenCL n'implique aucune redevance ou redevance) en vaut clairement la peine, et tout le monde bénéficie de la polyvalence de ces API. qui implémente le support OpenCL dans leurs produits.

En savoir plus sur les endroits où vous pouvez rencontrer OpenCL dans la vie quotidienne aujourd'hui, comment il accélère les logiciels bureautiques réguliers et quelles opportunités il ouvre aux développeurs aujourd'hui et nous en parlerons.

GPGPU, OpenCL et un peu d'histoire


Bien sûr, OpenCL n'est pas le seul moyen d'implémenter l'informatique GPU générale. En plus d'OpenCL, il y a CUDA, OpenACC et C ++ AMP sur le marché, mais les deux premières technologies sont vraiment populaires et bien connues.

Les mêmes personnes qui ont donné au monde les technologies OpenGL et OpenAM: Khronos Group, développaient la norme OpenCL. La marque OpenCL elle-même appartient à Apple, mais, heureusement pour les programmeurs et les utilisateurs du monde entier, cette technologie n'est ni fermée ni liée aux produits de la société "apple". En plus d'Apple, Khronos Goup comprend des géants du marché comme Activision Blizzard, AMD, IBM, Intel, NVidia et une douzaine d'autres sociétés (principalement des fabricants de solutions ARM) qui ont rejoint le consortium plus tard.

Dans une certaine mesure, OpenCL et CUDA sont idéologiquement et syntaxiquement similaires, dont la communauté n'a que profité. En raison de la similitude de certaines méthodes et approches, il est plus facile pour les programmeurs d'utiliser les deux technologies, de passer de «fermé» et NVidia CUDA lié au matériel à universel et de travailler partout (y compris les processeurs multicœurs ordinaires et les superordinateurs basés sur l'architecture CELL) OpenCL .

OpenCL au quotidien


Maintenant, vous vous dites "oui, ils vont parler de jeux et de photoshop". Non, OpenCL est capable d'accélérer l'informatique au-delà des simples graphiques. L'une des applications les plus populaires qui utilisent les capacités de GPGPU est ... une suite bureautique multiplateforme LibreOffice. Le support OpenCL y est apparu en 2014 et est utilisé pour accélérer les calculs dans le gestionnaire de table Calc.

Voici une comparaison vidéo visuelle des performances du système avec AMD A10-7850K avec cœur graphique R7 et Intel Core I5 ​​avec HD4600 à bord:



Dans les tests de synthèse, le même AMD A10-7850K en informatique hétérogène utilisant OpenCL surpasse le i5-4670K / 4690 presque deux fois plus cher :


Soit dit en passant, dans la science et ses domaines d'application, de nombreuses tâches se déplacent parfaitement vers les processeurs vectoriels des accélérateurs vidéo et vous permettent d'effectuer des calculs des dizaines et des centaines de fois plus rapides que sur le CPU.

Par exemple, différentes sections d'algèbre linéaire. La multiplication des vecteurs et des matrices est ce que les GPU font tous les jours, en travaillant avec des graphiques. Dans ces tâches, ils n'ont pratiquement pas d'égal, car leur architecture a été perfectionnée pour résoudre de tels problèmes depuis des années.

Cela inclut également la transformée de Fourier rapide et tout ce qui y est lié: résolution d'équations différentielles complexes par diverses méthodes. Séparément, nous pouvons distinguer les problèmes gravitationnels des N-corpsqui sont utilisés pour calculer l'aérodynamique et l'hydrodynamique, modéliser les liquides et le plasma. La complexité des calculs réside dans le fait que chaque particule interagit avec les autres, les lois d'interaction sont assez compliquées et les calculs doivent être effectués en parallèle. Pour de telles tâches, les capacités OpenCL et AMD GPU sont parfaitement adaptées, calcul parallèle avec de nombreux objets et donc résolu avec succès sur des processeurs de ce type tous les jours: dans les pixel shaders .

Les grilles structurées sont souvent utilisées dans les graphiques raster. Non structuré - dans les calculs dans le domaine de l'hydrodynamique et dans divers calculs avec des éléments dont les graphiques ont des poids différents. Différences entre les réseaux structurés et les réseaux non structurés dans le nombre de «voisins» de chaque élément: les réseaux structurés ont la même différence, les réseaux non structurés en ont différents, mais les deux correspondent parfaitement à la capacité d'OpenCL à accélérer les calculs. Les difficultés de transfert des calculs sont principalement mathématiques. C'est-à-dire que la tâche principale du programmeur n'est pas seulement d '«écrire» le travail du système, mais aussi de développer une description mathématique qui transfère les données aux capacités matérielles en utilisant OpenCL.

Logique combinatoire (le calcul de hachage s'applique également ici), méthodes de Monte Carlo- qui est bien porté sur le GPU. Un grand nombre de modules informatiques, de hautes performances en informatique parallèle sont ce qui accélère vraiment ces algorithmes.

Quoi d'autre peut être accéléré avec OpenCL et des GPU puissants?


Cherchez le chemin du retour. Calculs graphiques et programmation dynamique: tri, détection de collision (contact, intersection), génération de structures régulières, divers algorithmes de sélection et de recherche. Avec certaines limitations, mais elles se prêtent à l'optimisation et à l'accélération du travail des réseaux de neurones et des structures connexes, mais ici, les problèmes sont plus susceptibles que les structures neuronales soient simplement «coûteuses» à virtualiser, il est plus rentable d'utiliser des solutions FPGA. Le travail des machines à états finis (qui sont déjà utilisés pour travailler avec le GPU, par exemple, quand il s'agit de compression / décompression d'un signal vidéo ou de trouver des éléments en double) est excellent.

OpenCL vs CUDA


Comparer directement les performances d'OpenCL et de CUDA n'a pas de sens. Premièrement, si nous les comparons sur les cartes vidéo AMD et NVidia, les adaptateurs vidéo AMD gagneront dans une course difficile de capacités informatiques: les accélérateurs NVidia modernes ont un certain nombre de limitations de performances au format FP64 introduites par NVidia lui-même afin de vendre des cartes vidéo «professionnelles» pour informatique (séries Tesla et Titan Z). Leur prix est incomparablement plus élevé que celui de leurs homologues FLOPS basés sur les solutions AMD et leurs cartes «connexes» dans la ligne numérique NVidia, ce qui rend la comparaison assez compliquée. Vous pouvez prendre en compte les performances par watt ou la productivité par dollar, mais cela n'a presque rien à voir avec une pure comparaison de la puissance de calcul: "FLOPS à tout prix" s'inscrit faiblement dans la situation financière actuelle,et en termes de productivité par dollar, la «vieille femme» 7970 GHz Edition (alias R9 280X) est toujours l'une des cartes vidéo les plus rentables.

Deuxièmement, vous pouvez essayer de comparer OpenCL et CUDA sur une carte vidéo de NVidia, mais NVidia lui-même implémente OpenCL via CUDA au niveau du pilote, de sorte que la comparaison sera quelque peu malhonnête pour des raisons évidentes.

D'un autre côté, si vous prenez en compte non seulement les performances, une analyse peut encore être effectuée.

OpenCL fonctionne sur une liste de matériel beaucoup plus étendue que NVidia CUDA. Presque tous les processeurs prenant en charge le jeu d'instructions SSE 3, les accélérateurs vidéo de Radeon HD5xxx et NVidia GT8600 aux derniers Fury / Fury-X et 980Ti / Titan X, AMD APU, graphiques intégrés Intel - en général, presque tout matériel moderne avec plusieurs cœurs peut profiter de cette technologie.

Les fonctionnalités d'implémentation de CUDA et d'OpenCL (ainsi qu'une documentation assez compliquée, car la programmation parallèle dans son ensemble est loin d'être le domaine de développement le plus simple), se reflètent plutôt dans des capacités et des outils de développement spécifiques, et non dans le domaine de la productivité.

Par exemple, OpenCL a quelques problèmes d'allocation de mémoire en raison de «la documentation OpenCL n'est pas très claire ici».

Dans le même temps, CUDA est inférieur à OpenCL dans le domaine de la synchronisation des flux - données, instructions, mémoire, tout. De plus, en utilisant OpenCL, vous pouvez utiliser des files d'attente et des instructions en panne, et CUDA ne sait toujours que comment en ordre. En pratique, cela évite les temps d'arrêt du processeur en attendant les données, et l'effet est plus perceptible, plus le capot du processeur est long et plus la différence entre la vitesse de la mémoire et la vitesse des modules de calcul est grande. En bref: plus vous allouez de puissance sous OpenCL, plus l'écart de performances est important. CUDA nécessitera l'écriture d'un code beaucoup plus complexe pour obtenir des résultats comparables.

Outils de développement (débogueur, profileur, compilateur) CUDA est un peu mieux que des outils similaires dans OpenCL, mais CUDA implémente l'API via C et OpenCL via C ++, simplifiant le travail avec la programmation orientée objet, tandis que les deux cadres regorgent de «local »Astuces, restrictions et fonctionnalités.



L'approche de NVidia dans ce cas est très similaire à la façon dont Apple fonctionne. Une solution fermée, avec un large éventail de restrictions et de règles strictes, mais bien affûtée pour travailler sur un matériel spécifique.

OpenCL offre des outils et des capacités plus flexibles, mais nécessite un niveau de formation plus élevé de la part des développeurs. Le code général sur un OpenCL pur devrait fonctionner sur tout matériel le supportant, mais en même temps «optimisé» pour des solutions spécifiques (par exemple, les accélérateurs vidéo AMD ou les processeurs CELL) fonctionnera beaucoup plus rapidement.

Source: https://habr.com/ru/post/fr388421/


All Articles