OpenCL vs performance OpenMP
Ont été les études comparant OpenCL pour OpenMP la performance? Plus précisément je suis intéressé dans les frais généraux de lancer des discussions avec OpenCL, par exemple, si l'on se décomposer le domaine dans un très grand nombre d'éléments de travail (dirigés chacun par un thread de faire un petit travail) par rapport à des poids plus lourd threads OpenMP étaient le domaine a été décomposé en sous-domaines dont le nombre est égal au nombre de cœurs.
Il semble que la prise en charge d'OpenCL modèle de programmation plus ciblée vers massivement parallèle des frites (Gpu, par exemple), plutôt que de Processeurs qui ont de moins en moins, mais de plus en plus puissants cœurs.
Peut OpenCL être un moyen efficace de remplacement pour OpenMP?
- Je serais aussi intéressé de savoir si le/lors de l'utilisation d'OpenMP et OpenCL ensemble est efficace. OpenCL est thread-safe (à l'exception de la clSetKernelArg() la méthode), de sorte qu'il semble, comme peut-être il ya de la place pour profiter de ces deux technologies.
- Si votre définition de "efficace" comprend la lisibilité et de l'évolution, alors la réponse doit être "non". OpenCL ne peut pas être vissé sur le code existant dans la façon dont OpenMP peut, et il a une grande syntaxique dilatation par rapport à OpenMP. D'autre part, l'écriture OpenMP code qui permet d'utiliser efficacement une hiérarchie de mémoire est généralement beaucoup moins lisible que le même en OpenCL.
- Je peux bien et scientifiques de comparaison entre OpenMP et OpenCL peut être trouvé ici: Comparaison des OpenMP & OpenCL Parallèle les Technologies de Traitement par Krishnahari Thouti et S. R. Sathe
- Votre question doit être réduit un peu. Vous êtes à la recherche pour une comparaison de GPU vs multi-thread CPU, ou OpenMP vs OpenCL? Afin de comparer les deux langues, ils ont vraiment besoin d'être en cours d'exécution sur la même architecture. Sinon, c'est des pommes et des oranges.
Vous devez vous connecter pour publier un commentaire.
Les points de repère que j'ai vu indiquent que OpenCL et OpenMP en cours d'exécution sur le même matériel sont généralement comparable à la performance, ou OpenMP a des performances légèrement meilleures. Cependant, je n'ai pas vu les points de repère que je considère concluante, parce qu'ils ont été le plus souvent défaut dans les explications détaillées de leur méthodologie. Cependant, il ya quelques choses à considérer:
OpenCL aura toujours certains frais généraux supplémentaires lors de la compilation du noyau lors de l'exécution. Aucun point de repère ou les besoins de liste cette fois séparément, l'utilisation de pré-compilé en natif, les grains, ou courir assez longtemps que la compilation du noyau est insignifiant.
OpenCL implémentations varient. GPU vendeurs tels que NVidia n'ont aucun intérêt à s'assurer que leur PROCESSEUR OpenCL mise en œuvre est aussi rapide que possible. Aucun des OpenCL implémentations sont susceptibles d'être aussi mature qu'un bon OpenMP mise en œuvre.
L'OpenCL spec dit rien sur le fond à propos de la façon dont PROCESSEUR implémentations utilisent le filetage sous le capot, de sorte que toute la question de savoir si le filetage est relativement léger ou poids lourd sera nécessairement spécifiques à l'implémentation.
Lorsque vous êtes en cours d'exécution OpenCL code sur un CPU, vos éléments de travail n'ont pas à être minuscule et nombreux. Vous pouvez abattre le problème de la même manière que vous le feriez pour OpenMP.
Même si OpenCL a un peu plus de surcharge, il peut y avoir d'autres raisons de le préférer.
Évidemment, si votre code peut faire de la bonne utilisation d'un GPU, vous voulez avoir un OpenCL mise en œuvre. OpenCL performance sur un CPU peut être assez bon que ce n'est pas la peine aussi de maintenir un OpenMP de secours, un chemin de code pour les utilisateurs qui n'ont pas de Gpu puissants.
Un bon PROCESSEUR OpenCL mise en œuvre signifie que vous obtiendrez automatiquement le bénéfice de ce jeu d'instructions des extensions de la CPU et de la prise en charge d'OpenCL l'appui à l'exécution. Avec OpenMP, vous avez à faire un travail supplémentaire pour s'assurer que votre exécutable comprend à la fois SSEx et AVX chemins de code.
OpenCL vecteur de primitives peuvent vous aider à exprimer certains explicite du parallélisme sans la portabilité et lisibilité des sacrifices que vous obtenez de l'aide de l'ESS intrinsèques.
J'ai un programme qui a le choix soit d'utiliser openCL ou openMP sur certains des principaux goulets d'étranglement, fondamentalement ajoutant des vecteurs et de l'exécution de réductions.
Dans mon cas, openMP prend 13 secondes où openCL prend 10 secondes, sur le CPU. Intel I5.
La manière la plus rapide de configuration pour moi jusqu'à présent est d'ajouter les vecteurs à l'aide de GPU openCL, et ne les réductions sur openMP me déprimer à 7 secondes. Quand je fais de la réduction du openCL noyau, sur GPU, il faut un total de 8 secondes.
Donc, de mon expérience, je dirais peut-être que ça dépend de l'utilisation, et bien vous pouvez optimiser votre openCL noyau.