Le déjeuner gratuit est-il terminé? [fermé]


12

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.


15
Combien de cœurs possède votre téléphone?
Matt D

6
Mon Nokia 2700 a un cœur.
cpp

5
@MattD Désolé, mais pourquoi est-il "temps de mettre à niveau", et qu'est-ce que le nombre de cœurs dans le téléphone de cpp a à voir avec cela? Comment savez-vous qu'un Nokia 2700 ne suffit pas à ses besoins?
Andres F.

2
Je vais déclarer officiellement, par une observation totalement non scientifique, qu'il y a eu une telle révolution du côté matériel, mais la révolution logicielle a été extraordinairement lente. Obtenir des outils simultanés de qualité pour tous les programmeurs est toujours un défi difficile et la concurrence est toujours quelque chose qui déclenche même les développeurs parallèles chevronnés de manière difficile à reproduire.
Jesse C. Slicer

2
Je veux juste souligner que ce n'est pas parce que le moment des prédictions est erroné que les prédictions sont fausses. Il est bien évident que les points clés que vous avez énumérés ci-dessus n'ont pas obtenu l'importance implicite, mais il y a eu des pas dans la direction de chacun de ces points. Je dirais donc que les prédictions ci-dessus vont devenir vraies, c'est juste une question de quand. Le QUAND le sera quand il deviendra une exigence et pas seulement un désir. Savoir quand ce seuil sera franchi est la raison pour laquelle il est si difficile de prédire quand.
Dunk

Réponses:


23

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.


2
Je ne suis pas sûr du déclin de certains langages, j'espère que nous verrons du code écrit avec plus d'attention à minimiser les dépendances qu'autre chose. Après tout, ce n'est pas vraiment la langue qui est en cause, c'est la façon dont vous l'utilisez. Et le «fruit bas» de son utilisation n'est plus aligné avec le multithread / simultané.
Matt D

6
@MattD: La façon dont vous utilisez une langue et la langue elle-même peuvent être en cause. Dites que votre programme est incorrect. Vous êtes celui qui a écrit mal, mais la langue ne pas nécessairement vous aider à écrire ce droit , et qui est tout aussi important.
Jon Purdy

6

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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.