Dans son célèbre article The Free Lunch Is Over de 2005, Herb Sutter a prédit une révolution de programmation simultanée aussi grande qu'une révolution orientée objet. Cette révolution s'est-elle vraiment produite dans les années 2005 - 2013?
Points clés de l'article:
Les fabricants de processeurs n'ont plus de place avec la plupart de leurs approches traditionnelles pour augmenter les performances du processeur. Au lieu de conduire des vitesses d'horloge toujours plus élevées, ils se tournent plutôt vers des architectures hyperthreading et multicœurs.
Les applications devront de plus en plus être simultanées si elles veulent exploiter pleinement les gains de débit du processeur.
«Oh, les performances importent peu, les ordinateurs ne cessent d’accélérer» la déclaration sera fausse.
L'efficacité et l'optimisation des performances deviendront plus, pas moins, importantes. Les langages qui se prêtent déjà à une forte optimisation trouveront une nouvelle vie; ceux qui n'ont pas besoin de trouver des moyens de rivaliser et de devenir plus efficaces et optimisables. Attendez-vous à une augmentation à long terme de la demande de langues et de systèmes axés sur les performances.
Les langages et systèmes de programmation seront de plus en plus obligés de bien gérer la concurrence. Nous avons désespérément besoin d'un modèle de programmation de niveau supérieur pour la concurrence que les langues ne proposent aujourd'hui.
la source
Réponses:
Oui, mais ça dépend.
Vous ne pouvez pas attendre à écrire nonbanal , haute performance logiciel sans à la fois en profitant de matériel parallèle et en utilisant comme technique concurrency de structuration du programme. Mais la plupart des logiciels sont à la fois triviaux et non critiques pour les performances. Une application Web ne fait pas beaucoup de calculs, et les applications CRUD n'ont rien à voir avec les limites temporelles strictes de certains logiciels de simulation et médicaux.
Les développeurs de jeux en particulier doivent s'en préoccuper, car les jeux sont le type d'application le plus courant avec des exigences en temps réel modérées. Le problème est saillant sur un téléphone mobile, où vous voulez extraire autant de puissance de calcul et de rendu que possible d'une puce intégrée avec deux cœurs de processeur et un GPU basse consommation. C'est une autre raison pour laquelle tant de développeurs regardent Haskell et attendent que des langages comme Rust mûrissent - nous voulons la sécurité et les performances sur du matériel moderne.
Depuis 2005, nous avons acquis des outils nouveaux et améliorés tels que OpenCL, CUDA, OpenMP et des jeux d'instructions vectorielles pour travailler avec la concurrence et le parallélisme des données dans les langages établis. Cependant, les nouveaux arrivants sont conçus dès le début pour faire beaucoup plus de choses intéressantes avec la concurrence.
L'exécution simultanée de Haskell permet au langage de fournir un support riche pour le parallélisme léger (étincelles) et les abstractions de concurrence (threads, canaux et références mutables partagées). Go et Rust proposent également des tâches légères, Go utilisant des canaux et Rust utilisant la transmission de messages.
Ces systèmes offrent une sécurité de la mémoire, des temps d'exécution performants et une protection statique contre certains types de courses. L'immuabilité par défaut de Haskell et de Rust facilite la gestion des accès simultanés. Erlang a fait cela déjà dans les années 80, mais les besoins des logiciels et nos connaissances sur la façon de concevoir des systèmes de programmation ont également amélioré depuis-Dieu merci.
Enfin, de nombreuses langues existantes - je ne nommerai pas de noms - sont prêtes à décliner comme choix crédibles pour écrire de nouveaux logiciels. Leurs charges de complexité et leurs abstractions de concurrence médiocres les rendent inadaptés aux considérations des applications modernes. Nous attendons simplement des alternatives mûres.
la source
Voici quelques points de données; décidez par vous-même si cela compte comme une révolution.
Matériel parallélisé
Vers 2005, Intel et AMD commencent à produire en masse des processeurs de bureau x86 à deux cœurs (Pentium D et Athlon 64), avec des vitesses d'horloge d'environ 3 GHz.
En 2006, PlayStation 3 est sorti, avec le processeur Cell avec 8 + 1 cœurs à 3,2 GHz.
En 2006, la série GeForce 8 est lancée. Il se compose d'un grand nombre (~ 100) de «processeurs de flux» à usage général, par opposition à des unités graphiques spécifiques. Vers 2007, la spécification CUDA 1.0 est publiée, permettant l'exécution de calculs à usage général sur du matériel NVidia massivement parallèle.
Depuis lors, les tendances se sont poursuivies.
Supposons que maintenant, en 2013, Intel et AMD proposent des processeurs 4, 8 et 16 cœurs, avec des vitesses d'horloge légèrement supérieures à seulement 4 GHz. Les conceptions à double cœur et à quatre cœurs sont courantes pour les appareils de faible puissance, tels que les ordinateurs portables et les smartphones.
Tout cela est du matériel informatique de consommation courante fabriqué en masse.
Logiciel
CUDA est sorti en 2007, puis OpenCL en 2008, permettant d'utiliser des GPU massivement parallèles dans le calcul général (non graphique). Le modèle devient populaire; de nombreuses sociétés d'hébergement (par exemple Amazon) proposent des GPU pour les tâches informatiques générales.
Go est sorti en 2009, avec des threads préemptifs très bon marché ("goroutines") et permettant d'exprimer efficacement des algorithmes hautement concurrents.
Akka toolkit est sorti pour Java et Scala en 2009, permettant une concurrence basée sur les acteurs.
Erlang (une langue hautement concurrente) voit une certaine augmentation de son utilisation.
Concurrence vs parallélisme
Notez que pour utiliser du matériel parallèle, on n'a pas nécessairement besoin de la concurrence logicielle , c'est-à-dire de jongler avec les threads d'exécution dans un calcul. De nombreux problèmes sont résolus par des processus parallèles non interactifs, où chaque processus est un programme séquentiel traditionnel.
Le traitement parallèle peut utiliser des langages plus traditionnels et des cadres parallèles, comme map-Reduce ou MPC ou OpenMP. Pour de tels cadres, la présence de plusieurs cœurs sur le même cristal CPU n'est pas très différente conceptuellement d'avoir simplement plus de CPU dans le cluster; la différence est principalement la vitesse.
Pas de déjeuner gratuit pour l'instant
Les vitesses du processeur persistent à environ 5 GHz dans le haut de gamme. Avec de meilleures technologies en vue, comme les transistors en graphène, les fréquences pourraient à nouveau augmenter à l'avenir, mais pas très bientôt probablement.
la source