Es ist viel schwieriger, wirklich schändliche Datenrennen mit einer einzigen CPU zu entwickeln. Ich meine, klar, Sie können zwischen Wörtern reißen, wenn Sie eine einzelne CPU unterbrechen, aber können Sie exotische Szenarien erstellen, in denen es keine einzelne Verschachtelung von Threads gibt, die das tun, was Sie wollen?
Okay, vielleicht zählt das Erstellen heimtückischer Bugs nicht als gültige Verwendung von Weiterentwicklungen mit mehreren Codes. Wie sich herausstellt, gibt es nicht viel, was Multicore leisten kann, wenn ein einzelner Kern nicht genügend Zeit hat. Der Grund ist einfach. Wenn Sie versuchen, diese bösen Datenrennen zu vermeiden, müssen Sie Synchronisierungspunkte in Ihrem Code haben. Wenn Sie Ihren Code als ein Berechnungsgitter modellieren, bei dem die Eingaben vollständig und synchronisiert sein müssen, bevor Sie die Ausgaben berechnen und produzieren können, ist es leicht zu erkennen, dass eine einzelne CPU einfach entlang des Gitters arbeiten und den nächsten verfügbaren Arbeitsblock berechnen kann .
Wenn Sie nachweisen können, dass Ihr Algorithmus von einer Turing-Maschine gelöst werden kann (das ist praktisch jeder Algorithmus, den wir interessieren), können Sie nachweisen, dass der Algorithmus nicht nur von einer einzelnen Kern-CPU ausgeführt werden kann, sondern von einer Zustandsmaschine mit einem sehr langen Stück Klebeband zur Erinnerung!
Der CHESS Race Detector nutzt dies tatsächlich, um Race Cases zu finden. Es führt alle Singlethread-Prozesse aus und untersucht systematisch alle möglichen Interleaves zwischen Threads. Dabei wird versucht, Fälle zu finden, in denen ein Test aufgrund eines Race-Falls fehlschlägt. CHESS hängt davon ab, dass Sie jede Multithread-Anwendung auf einem einzigen Kern ausführen können.
Die Fälle, in denen Sie Multicore benötigen, treten auf, wenn Sie anfangen, die Grenzen der Hardware zu erweitern. Die offensichtliche ist, wenn Sie Zeitbeschränkungen haben. Einige Probleme mit Echtzeitbeschränkungen lassen sich nicht mit einem einzelnen Kern lösen, da sie den Takt eines einzelnen Kerns nicht schnell genug antreiben können. Es gibt einen Grund, warum CPUs auf 4 GHz angestiegen sind und sich dann etwas beruhigt haben und mehr Kerne bei niedrigeren Geschwindigkeiten bevorzugen.
Eine exotischere Version dieser Zeitbeschränkung gibt es in Echtzeitsystemen. In einigen harten Echtzeitsystemen ist der Service von Interrupts so anspruchsvoll, dass Sie tatsächlich eine Multi-Core-CPU auswählen müssen, mit der Sie die Interrupts auf die Kerne aufteilen können, oder Sie stoßen auf zeitliche Einschränkungen.
Eine weitere Grenze ergibt sich bei Datenbussen. Betrachten Sie das Blue Gene / P als Beispiel. JUGENE, ein spezieller Blue Gene / P-Supercomputer, hat 144 Terabyte Speicher. Sie stellen einfach keine einzelnen CPU-Computer her, die auf den gesamten Speicher zugreifen können.