Wie verkleinere ich parallele Komplexitätsergebnisse auf konstant viele Kerne?

20

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 NO(Logcn)p(n)O(nk)c,kN

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 NO(nk)pN

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 ) OO(nk)pO(nk)O

Raphael
quelle
Der Satz von Brent?
cic
Meinen Sie ? Wenn ja, ist dies (afaik) nur unter bestimmten Umständen anwendbar und erlaubt auch nicht sofort die Übersetzung von Laufzeiten. Oder wenn doch, bitte in einer Antwort ausarbeiten. Tp<Wp+D
Raphael
NC beantwortet die Frage "Ist es möglich, mehr Hardware für weniger Laufzeit zu tauschen?" Möglicherweise möchten Sie sich auf konstante Hardware beschränken. Dies ähnelt der Beschränkung auf konstanten Speicher, um einige Probleme besser zu modellieren. Für eine praktische Anwendung siehe Übertragen von Lookhead-Addierern, mehr Hardware, so dass die Addition von Bits in O ( N ) erfolgt . NO(N)
AProgrammer

Antworten:

13

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.

Tsuyoshi Ito
quelle
1
1) Ja, das Parallelisieren auf konstant vielen Kernen kann nur zu einer konstanten Beschleunigung führen. Das ist inhärent und leider in Begriffen verborgen . Die (imho) interessante Frage ist: Kann ich die (optimale) Geschwindigkeit k oder nur k / 2 oder k - 1 erreichen ? 2) Während die Annahme eines unendlichen Speichers durch die Verfügbarkeit von viel RAM gerechtfertigt sein kann (und technisch gesehen können Sie die Festplatte hinzufügen), gilt dies im Allgemeinen nicht für Prozessoren. Typische (Personal-) Maschinen haben heutzutage 16 oder weniger Kerne. Mit anderen Worten, Sie können "normale" Ergebnisse bis zu relevanten Problemgrößen verwenden, viele parallele Ergebnisse nur bis zu n 20 .Okk/2k-1n20
Raphael
4
@Raphael: Die Frage, ob ein bestimmtes Problem zu NC gehört oder nicht, modelliert Ihre Frage nicht. Ich sage nicht, dass Ihre Frage uninteressant ist; Ich sage nur, dass NC nicht die richtige Komplexitätsklasse ist, um dies zu modellieren.
Tsuyoshi Ito
Ich bin wirklich froh, das zu hören. eine Person behauptet jedoch etwas anderes. Nicht unbedingt mit NC, aber mit komplexitätstheoretischen Ergebnissen im Allgemeinen. Wie ist es mit anderen Klassen?
Raphael
Eine Korrektur: Ein Problem in NC bedeutet, dass die Laufzeit polylogarithmisch ist, wenn die Anzahl der Prozessoren ein ausreichend großes Polynom in der Eingabegröße ist. In dem wohl realistischeren Szenario, in dem die Anzahl der Prozessoren ein festes Polynom wie oder eine langsamere nicht konstante Funktion wieO(logn), die Zugehörigkeit zu NC impliziert formal überhaupt nichts. O(n)O(Logn)
JeffE
@ JeffE: Das ist keine Korrektur. Ich habe nur "Mehr Prozessoren vorbereiten" geschrieben, ohne die genaue Bedeutung anzugeben (weil ich dachte, dass dies den Punkt verdunkeln würde).
Tsuyoshi Ito
10

NC

p=1NC

Aber warte, da ist noch mehr.

NC

PO(nϵ),0<ϵ<1NCnnn<lg3nn0,5×109NC

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) begrenztpnp

Daher wird es immer wichtiger, speicherskalierbare parallele Algorithmen zu entwerfen, da diese für große Probleme praktisch sind.

n3n

Massimo Cafaro
quelle