Ich hatte Probleme, die komplexitätstheoretische Sichtweise von "effizient gelöst durch parallelen Algorithmus" zu akzeptieren, die von der Klasse NC gegeben wird :
NC ist die Klasse von Problemen, die durch einen parallelen Algorithmus in der Zeit auf Prozessoren mit gelöst werden können .p ( n ) ≤ O ( n k ) c , k ≤ N
Wir können einen PRAM annehmen .
Mein Problem ist, dass dies nicht viel über "echte" Maschinen aussagt, dh Maschinen mit einer begrenzten Anzahl von Prozessoren. Jetzt wird mir gesagt, dass "es bekannt ist", dass wir einen -Prozessoralgorithmus auf -Prozessoren "effizient" simulieren können .p ∈ N
Was heißt hier "effizient"? Gibt es diese Folklore oder gibt es einen strengen Satz, der den durch die Simulation verursachten Overhead quantifiziert?
Was ich befürchte, das passiert, ist, dass ich ein Problem habe, das einen sequentiellen -Algorithmus und auch einen "effizienten" parallelen Algorithmus hat, der, wenn er auf Prozessoren simuliert wird , auch -Zeit benötigt (was) Dies ist alles, was auf dieser Granularitätsstufe der Analyse zu erwarten ist, wenn der sequentielle Algorithmus asymptotisch optimal ist. In diesem Fall gibt es keine Beschleunigung, soweit wir sehen können; Tatsächlich kann der simulierte Parallelalgorithmus langsamer sein als der sequentielle Algorithmus. Das heißt, ich suche wirklich nach Aussagen, die präziser sind als Grenzen (oder nach einer Erklärung, dass solche Ergebnisse fehlen).p O ( n k ) O
Antworten:
Wenn Sie davon ausgehen, dass die Anzahl der Prozessoren durch eine Konstante begrenzt ist, haben Sie Recht, dass ein Problem in der NC in der Praxis nicht viel bedeutet. Da jeder Algorithmus auf einem PRAM mit k Prozessoren und t paralleler Zeit mit einem Einzelprozessor-RAM in O ( kt ) -Zeit simuliert werden kann, können sich die parallele Zeit und die sequentielle Zeit nur um einen konstanten Faktor unterscheiden, wenn k eine Konstante ist.
Wenn Sie jedoch davon ausgehen, dass Sie einen Computer mit mehr Prozessoren vorbereiten können, während die Eingabegröße zunimmt, bedeutet ein Problem in der NC, dass die Laufzeit "sehr kurz" ist, oder genauer gesagt, wenn Sie mehr Prozessoren vorbereiten können. polylogarithmisch in der Eingabegröße. Wenn Sie der Meinung sind, dass diese Annahme unrealistisch ist, vergleichen Sie sie mit der Annahme eines unbegrenzten Speichers: Tatsächliche Computer haben nur eine begrenzte Menge an Speicherplatz, aber bei der Untersuchung von Algorithmen und Komplexität gehen wir fast immer davon aus, dass ein Rechengerät keine konstante Obergrenze hat an den Weltraum gebunden. In der Praxis bedeutet dies, dass wir einen Computer mit mehr Speicher vorbereiten können, wenn die Eingabegröße zunimmt. So verwenden wir normalerweise Computer in der realen Welt. NC modelliert eine analoge Situation in paralleler Berechnung.
quelle
Aber warte, da ist noch mehr.
In einer der Antworten wurde festgestellt, dass "In der Praxis bedeutet dies, dass wir einen Computer mit mehr Arbeitsspeicher vorbereiten können, wenn die Eingabegröße zunimmt. So verwenden wir normalerweise Computer in der realen Welt. NC modelliert eine analoge Situation in parallele Berechnung ".
Diesem Standpunkt stimme ich teilweise zu. Wir kaufen einen neuen Parallelcomputer mit mehr Speicher, wenn ein älterer Supercomputer außer Betrieb genommen wird, auch weil DRAM-Chips weniger zeitaufwendig sind und um den Parallelcomputer in Bezug auf seine Hauptkomponenten (Prozessoren, Speicher, Verbindungen usw.) etwas auszugleichen.
Da der Speicher jedoch eine begrenzte Ressource ist, wurde viel darüber geforscht, ihn effizient zu nutzen, ohne dass ein Supercomputer mehr Speicher benötigt, um größere Problemfälle zu lösen. Zum Beispiel schlugen Sun und Ni die Idee einer speichergebundenen Beschleunigung vor, und Quinn schlug die sogenannte Skalierbarkeitsfunktion vor, die misst, wie die Speichermenge pro Prozessor wachsen muss, um ein konstantes Effizienzniveau aufrechtzuerhalten. Da sich der parallele Overhead erhöht, wenn sich die Anzahl der Prozessoren erhöht, behalten wir im Allgemeinen die Effizienz bei und erhöhen die Größe des zu lösenden Problems. Die maximale Problemgröße ist jedoch durch die Größe des Hauptspeichers (die in linear ist) begrenztp n p
Daher wird es immer wichtiger, speicherskalierbare parallele Algorithmen zu entwerfen, da diese für große Probleme praktisch sind.
quelle