In seinem berühmten Artikel The Free Lunch Is Over aus dem Jahr 2005 sagte Herb Sutter eine Concurrent Programming Revolution voraus, die so groß wie die objektorientierte Revolution ist. Hat sich diese Revolution wirklich in den Jahren 2005 - 2013 zugetragen?
Wichtige Punkte im Artikel:
Bei den meisten traditionellen Ansätzen zur Steigerung der CPU-Leistung ist den Prozessorherstellern der Platz ausgegangen. Statt immer höhere Taktraten zu erzielen, setzen sie auf Hyperthreading- und Multicore-Architekturen.
Anwendungen müssen immer häufiger gleichzeitig ausgeführt werden, um den CPU-Durchsatz voll ausnutzen zu können.
"Oh, die Leistung ist nicht so wichtig, Computer werden immer schneller", wird die Aussage falsch sein.
Effizienz- und Leistungsoptimierung werden mehr und nicht weniger wichtig. Diejenigen Sprachen, die sich bereits für eine starke Optimierung eignen, werden neues Leben finden. diejenigen, die dies nicht tun, müssen Wege finden, um wettbewerbsfähig und effizienter und optimierbarer zu werden. Erwarten Sie langfristig eine erhöhte Nachfrage nach leistungsorientierten Sprachen und Systemen.
Programmiersprachen und -systeme werden zunehmend gezwungen sein, mit Parallelität gut umzugehen. Wir brauchen dringend ein übergeordnetes Programmiermodell für die Parallelität als die heutigen Sprachen.
quelle
Antworten:
Ja, aber es kommt darauf an.
Sie können nicht damit rechnen, nicht- triviale Hochleistungssoftware zu schreiben , ohne sowohl die parallele Hardware als auch die Parallelität als Programmstrukturierungstechnik zu nutzen. Die meiste Software ist jedoch sowohl trivial als auch nicht leistungskritisch. Eine Web-App macht nicht viel mit Zahlen und CRUD-Apps haben nichts mit den harten Zeitlimits einiger Simulations- und medizinischer Software zu tun.
Insbesondere Spieleentwickler müssen sich darum kümmern, da Spiele die am häufigsten verwendete Art von Anwendungen mit weichen Echtzeitanforderungen sind. Das Problem tritt vor allem bei Mobiltelefonen auf, bei denen ein integrierter Chip mit zwei CPU-Kernen und einer GPU mit geringem Stromverbrauch so viel Rechenleistung und Renderleistung wie möglich liefern soll. Das ist ein weiterer Grund, warum so viele Entwickler auf Haskell schauen und darauf warten, dass Sprachen wie Rust ausgereift sind - wir wollen Sicherheit und Leistung auf moderner Hardware.
Seit 2005 haben wir neue und verbesserte Tools wie OpenCL-, CUDA-, OpenMP- und Vektoranweisungssätze für die Arbeit mit Parallelität und Datenparallelität in etablierten Sprachen erhalten. Die relativen Neulinge sind jedoch von Anfang an so konzipiert, dass sie noch viel mehr interessante Dinge gleichzeitig tun können.
Dank der gleichzeitigen Laufzeit von Haskell bietet die Sprache umfassende Unterstützung für Lightweight-Parallelität (Funken) und Parallelitätsabstraktionen (Threads, Kanäle und gemeinsam genutzte veränderbare Referenzen). Go and Rust bietet auch leichte Aufgaben, Go using channels und Rust using message passing.
Diese Systeme bieten Speichersicherheit, leistungsfähige Laufzeiten und statischen Schutz gegen bestimmte Arten von Rennen. Die standardmäßige Unveränderlichkeit von Haskell und Rust erleichtert die Verwaltung der Parallelität erheblich. Erlang wurde tun dies bereits in den 80er Jahren, aber die Bedürfnisse der Software und unser Wissen darüber , wie Programmiersysteme zu entwerfen , haben sich ebenfalls verbessert Güte da-danken.
Schließlich sind viele existierende Sprachen - ich werde keine Namen nennen - bereit, als glaubwürdige Entscheidungen für das Schreiben neuer Software abzulehnen. Aufgrund ihrer Komplexität und schlechten Nebenläufigkeit sind sie für die Überlegungen moderner Anwendungen ungeeignet. Wir warten einfach auf ausgereifte Alternativen.
quelle
Hier sind einige Datenpunkte; Entscheide selbst, ob es sich um eine Revolution handelt.
Parallelisierte Hardware
Um 2005 starten Intel und AMD die Massenproduktion von 2-Kern-Desktop-x86-CPUs (Pentium D und Athlon 64) mit Taktraten um 3 GHz.
2006 erscheint PlayStation 3 mit dem Cell-Prozessor mit 8 + 1-Kernen bei 3,2 GHz.
Im Jahr 2006 wird die GeForce 8-Serie veröffentlicht. Es besteht aus einer großen Anzahl (~ 100) von allgemeinen "Stream-Prozessoren" im Gegensatz zu grafikspezifischen Einheiten. Um 2007 wird die CUDA 1.0-Spezifikation veröffentlicht, die einige allgemeine Berechnungen auf massiv paralleler NVidia-Hardware ermöglicht.
Seitdem haben sich die Tendenzen fortgesetzt.
Nehmen wir an, Intel und AMD bieten 2013 CPUs mit 4, 8 und 16 Kernen mit Taktraten, die etwas über lediglich 4 GHz liegen. Dual-Core- und Quad-Core-Designs sind für Geräte mit geringerem Stromverbrauch wie Laptops und Smartphones üblich.
All dies ist massenproduzierte Computerhardware für den täglichen Gebrauch.
Software
CUDA wird im Jahr 2007 und OpenCL im Jahr 2008 veröffentlicht und ermöglicht die Verwendung von massiv parallelen GPUs für allgemeine (nicht-grafische) Berechnungen. Das Modell wird populär; Viele Hosting-Unternehmen (z. B. Amazon) bieten GPUs für allgemeine Computeraufgaben an.
Go wird 2009 veröffentlicht und bietet sehr günstige Preemptive-Threads ("Goroutines"), mit denen sich hochkonkurrierende Algorithmen effizient ausdrücken lassen.
Das Akka-Toolkit wird 2009 für Java und Scala veröffentlicht und ermöglicht akteurbasierte Parallelität.
Erlang (eine sehr konkurrierende Sprache) sieht eine gewisse Zunahme der Nutzung.
Parallelität vs. Parallelität
Beachten Sie, dass für die Verwendung paralleler Hardware nicht unbedingt die gleichzeitige Verwendung von Software erforderlich ist, dh das Jonglieren mit Ausführungsthreads innerhalb einer Berechnung. Viele Probleme werden durch parallele , nicht interagierende Prozesse gelöst , wobei jeder Prozess ein traditionelles sequentielles Programm ist.
Bei der parallelen Verarbeitung werden möglicherweise traditionellere Sprachen und parallele Frameworks verwendet, z. B. Kartenreduzierung, MPC oder OpenMP. Bei solchen Frameworks unterscheidet sich das Vorhandensein mehrerer Kerne auf demselben CPU-Kristall konzeptionell nicht wesentlich davon, nur mehr CPUs im Cluster zu haben. Der Unterschied liegt hauptsächlich in der Geschwindigkeit.
Bisher kein kostenloses Mittagessen
Die CPU-Geschwindigkeit liegt im oberen Bereich noch bei rund 5 GHz. Mit besseren Technologien in Sicht, wie Graphen-Transistoren, könnten die Frequenzen in Zukunft wieder ansteigen, aber wahrscheinlich nicht sehr bald.
quelle