Für eine gute Parallelität ist viel mehr erforderlich, als ein paar Threads in eine Anwendung zu werfen und auf das Beste zu hoffen. Es gibt eine Reihe von Möglichkeiten, wie gleichzeitig ein Programm von peinlich parallel zu rein sequentiell ablaufen kann. Jedes Programm kann das Amdahlsche Gesetz verwenden, um auszudrücken, wie skalierbar ein Problem oder ein Algorithmus ist. Ein paar Voraussetzungen für eine peinlich parallele Bewerbung wären:
- Kein gemeinsamer Status, jede Funktion hängt nur von den übergebenen Parametern ab
- Kein Zugriff auf physische Geräte (Grafikkarten, Festplatten usw.)
Es gibt noch andere Qualifikationen, aber nur mit diesen beiden können wir verstehen, warum gerade Spiele nicht so einfach sind, wie Sie vielleicht denken, um die Vorteile mehrerer Kerne zu nutzen. Zum einen muss das Modell der Welt, das gerendert werden soll, geteilt werden, da verschiedene Funktionen Physik, Bewegung, künstliche Intelligenz usw. berechnen. Zum anderen muss jedes Bild dieses Spielmodells mit einer Grafikkarte auf dem Bildschirm gerendert werden.
Um fair zu sein, verwenden viele Spielehersteller Spiele-Engines, die von Dritten hergestellt werden. Es hat eine Weile gedauert, aber diese Spiele-Engines von Drittanbietern sind jetzt viel paralleler als früher.
Der Umgang mit effektiver Parallelität stellt größere architektonische Herausforderungen
Parallelität kann viele Formen annehmen, von der Ausführung von Aufgaben im Hintergrund bis zur vollständigen Unterstützung der Parallelität durch die Architektur. Einige Sprachen bieten Ihnen sehr leistungsstarke Funktionen für den gemeinsamen Zugriff , z. B. ERLANG . Sie müssen jedoch ganz anders darüber nachdenken, wie Sie Ihre Anwendung erstellen.
Nicht jedes Programm benötigt die Komplexität einer vollständigen Multicore-Unterstützung. Ein Beispiel hierfür ist Steuersoftware oder eine beliebige formulargesteuerte Anwendung. Wenn Sie den größten Teil Ihrer Zeit damit verbringen, auf den Benutzer zu warten, um etwas zu tun, ist die Komplexität von Multithread-Anwendungen einfach nicht so nützlich.
Einige Anwendungen eignen sich für eine peinlichere parallele Lösung, z. B. Webanwendungen. In diesem Fall beginnt die Plattform peinlich parallel und es liegt an Ihnen, keine Thread-Konflikte zu erzwingen.
Die Quintessenz:
Nicht alle Anwendungen sind wirklich betroffen, wenn nicht mehrere Threads (und damit Kerne) ausgenutzt werden. Für diejenigen, die dadurch verletzt werden, sind die Berechnungen manchmal nicht für eine parallele Verarbeitung geeignet, oder der Aufwand für die Koordinierung würde die Anwendung anfälliger machen. Leider ist die parallele Verarbeitung immer noch nicht so einfach, wie es gut sein sollte.