Frage:
Stimmt es, dass auf einem modernen Prozessor Parallelität auf einem einzelnen Kern möglich ist?
ptr_user7813604
2018-12-08 03:07:44 UTC
view on stackexchange narkive permalink

Final Edit: Ich habe gerade festgestellt, dass es bei Verwendung des Wortes "Parallelität" fast Parallelität == ILP ist. Ich dachte ursprünglich, dass sogar eine einzelne Anweisung in mehrere Phrasen unterteilt werden könnte, und zwar auf dieser Ebene Es würde eine gewisse Parallelität geben, aber dann wurde mir klar, dass dies keine Bedeutung hat. Sowohl in meinem Titel als auch in meinem Beispiel wurde nichts über die Parallelität von mehr als einem Thread erwähnt, wie dies von HyperThreading durchgeführt wurde. Daher ist @ user110971 ohne Zweifel die richtige Antwort. (Auf der philosophischen Ebene brauche ich nur eine Grundbedingung, um meine Rekursivität, den tiefsten Teil der Parallelität zu finden, zurückzugeben.)

Edit3: Ich habe ein Diagramm für meinen Edit2 erstellt und fand dieses Video auf YouTube über HyperThreading nützlich. enter image description here

Edit2: Kurz gesagt, für meine Frage übernehme ich die Definitionen auf Wikipedia und für die Definition der Begriffe:

  • Parallel: Zwei Threads, die zu jedem physischen Zeitpunkt unabhängig voneinander ausgeführt werden. So wird ein Thread den anderen zu keinem Zeitpunkt unterbrechen.
  • Gleichzeitig: Zwei Threads, die unabhängig voneinander und verschachtelt ausgeführt werden, sind zulässig, d. H. Nicht auf Parallelität beschränkt, und einer kann den anderen unterbrechen.
  • Kurz gesagt, für mich und Wikipedia-Autoren umfasst Concurrent Parallel. Danke.

Edit: Um ganz klar zu sein, Parallelität bedeutet für mich echte Parallelität. Ich füge ein "wahr" hinzu, weil Leute, mit denen ich gesprochen habe, dazu neigen, parallel == parallel zu denken. (Siehe meinen zweiten Link)


Stimmt es, dass auf einem modernen Prozessor "wahre" Parallelität auf einem einzelnen Kern möglich ist? Ich habe woanders gefragt, aber keine bestätigende Antwort erhalten. Was ich wissen möchte, ist z. ob bei t = 0 zwei Befehle abgerufen und ausgeführt werden. Im gleichen physischen Moment.

Meine Frage kam von hier:

Paralleles Rechnen ist auf einem (Ein-Kern-) Einzelprozessor nicht möglich, da zu jedem Zeitpunkt (während eines einzelnen Taktzyklus) nur eine Berechnung erfolgen kann.

Abgesehen von HyperThreading?
@cHao: Was meinst du?HyperThreading ist derzeit die einzige Möglichkeit, dies zu tun?
Es ist der einzige Weg, echte Parallelität mit einem einzigen Kern zu erreichen, ja.Die superskalare Verarbeitung kann mehrere Aufgaben gleichzeitig ausführen, es kann jedoch immer noch nur ein Thread gleichzeitig ausgeführt werden.
Weil es eine Art Parallelität ist und es sich daher lohnt, darauf einzugehen.Dies ist ein Beispiel dafür, wie der Prozessor zwei oder mehr Anweisungen in einem einzigen Taktzyklus ausführt, genau wie Sie es gewünscht haben.Es ist einfach nicht die Art von Parallelität, über die die meisten Leute sprechen, wenn sie das Wort verwenden.
@cHao: Wie auch immer, meine Frage ist, ob das, was ich beschrieben habe, möglich ist, ohne auf HyperThreading beschränkt zu sein.
Mit @cHao Hyper Threading können Sie mehr als einen Thread pro Kern ausführen.
Ich verstehe es nicht - Was bedeutet es "wahr" oder "falsch" oder "unwahr" Parallelität?
@AlKepp: Haben Sie den zweiten Link gelesen, den ich bereitgestellt habe?
@cHao: Aber eigentlich ist es nicht das, wonach ich gefragt habe ...
@ptr_user7813604 Ich habe mir den ersten Link angesehen, der "wahre Parallelität" ist.Aber dieser verdächtige Pseudobegriff ist dort nicht definiert.Vielleicht könnten Sie die Grundbegriffe in Ihrer Frage schreiben, anstatt nur Links bereitzustellen.
Abgesehen davon möchte ich darauf hinweisen, dass dieser zweite Wikipedia-Artikel (Concurrent Computing) wirklich schlecht geschrieben ist ... es wird überall zitiert.Und die Definition, die Sie zitiert haben, hat eine Fußnote, die auch die Bedeutung wirklich ändert.
Während es möglicherweise sinnvoll ist, diese "Bearbeitungs" -Abschnitte für jemanden, der diese Frage von Anfang an verfolgt, ganz oben auf Ihre Frage zu setzen, ist sie für jemanden, der nur vorbeischaut, um sie zu lesen, in umgekehrter Reihenfolge (um den ersten Absatz zu verstehen, muss ich den lesenzuletzt und scrollen Sie * nach oben *).
Warum bearbeiten Sie Ihre Frage nicht einfach so, als ob die Informationen von Anfang an enthalten wären?Die Frage hat einen Bearbeitungsverlauf und muss nicht so ausgedrückt werden.
Vielleicht bin ich heute Morgen nur nervös :)
Sie haben dort einen guten Punkt!Ich gehe immer davon aus, dass die Frage Kontext enthält, aber nicht die Antwort.Die richtigen Informationen finden Sie in der akzeptierten Antwort.Aber andererseits bin ich es gewohnt, einen Überlauf zu stapeln.
Sie sollten sich [VLIW-Prozessoren ... https://en.wikipedia.org/wiki/Very_long_instruction_word ansehen
Drei antworten:
user110971
2018-12-08 03:23:59 UTC
view on stackexchange narkive permalink

Auf einem superskalaren Prozessor ist tatsächlich Parallelität möglich.Ein superskalarer Prozessor kann mehrere Befehle gleichzeitig ausführen, indem er mehrere Ausführungseinheiten verwendet. pipeline Abhängig von der Architektur gibt es bestimmte Einschränkungen.Es ist keine wahre Parallelität.Wenn Sie rechnen müssen $$ A = B + C, $$ span> $$ D = A + 3, $$ span> Sie können nicht beide Anweisungen gleichzeitig ausführen.Sie können jedoch ausführen $$ A = B + C, $$ span> $$ D = D + 3, $$ span> gleichzeitig durch Verwendung von zwei ALUs.

Als Antwort auf Ihre Frage können Sie ein gewisses Maß an Parallelität auf einem einzelnen Kern aufweisen, sofern Ihre Anweisungen nicht dieselben Hardwareressourcen verwenden.

Und dann sind viele DSP-Architekturen explizit MIMD (wie SIMD, aber die Anweisungen zu den verschiedenen Ausführungseinheiten sind unterschiedlich).Im Gegensatz zur "impliziten superskalaren Ausführung" wird diese VLIW- und "explizit parallele Befehlsberechnung" vom Linker geplant und nicht von der CPU-Logik erkannt.
@BenVoigt nicht nur DSP, es gibt auch Itanium mit VLIW.
Nate S.
2018-12-08 03:22:41 UTC
view on stackexchange narkive permalink

Auf einigen Prozessoren ist dies (manchmal) möglich.Da unterschiedliche Anweisungen unterschiedliche Prozessorressourcen verwenden (ALU, Gleitkomma, Laden, Speichern usw.), ist es manchmal möglich, einige davon zu parallelisieren.Einzelheiten dazu finden Sie hier auf einer Ivy Bridge (x86) -CPU: https://dendibakh.github.io/blog/2018/03/21/port-contention

Evan
2018-12-08 06:27:15 UTC
view on stackexchange narkive permalink

Es gibt viele verschiedene Arten von Parallelität.

Parallelität auf Befehlsebene ist ein Merkmal jedes superskalaren Prozessors.Zu jedem Zeitpunkt werden mehrere Anweisungen ausgeführt.Diese Anweisungen stammen jedoch aus demselben Kontroll-Thread.

Parallelität auf Thread-Ebene innerhalb eines einzelnen Kerns ist mit Hyperthreading möglich - zwei separate Threads, die gleichzeitig unterschiedliche Kernressourcen verwenden.Ein Thread kann die Ganzzahl-ALU verwenden, während ein anderer ein Laden oder Speichern ausführt.

Parallelität auf Datenebene ist auch eine Art von Parallelität.SIMD-Einheiten können dieselben Anweisungen gleichzeitig in mehreren Registern ausführen.Wenn Sie beispielsweise auf jedes Pixel in einem Bild dieselbe Unschärfetransformation anwenden müssen, können Sie diese 8 Pixel möglicherweise parallel ausführen, jedoch innerhalb desselben Kontrollfadens.

Großartig, und ich entschuldige mich dafür, dass mein "z. B. ob bei t = 0 zwei Anweisungen abgerufen und ausgeführt werden" ein falsches Beispiel ist. Es ist nicht dasselbe, wie ich es mir vorgestellt habe.
Ist das für Hyperthreading also kein Duplikat in einem einzelnen Kern, sondern die gleichzeitige Verwendung unterschiedlicher Kernressourcen?
Ein einzelner Kern kann genauso gut mehrere Kopien derselben Einheit enthalten.Beispielsweise ist es typisch, zwei oder mehr ganzzahlige Einheiten und eine Gleitkommaeinheit zu haben.Oder zwei vollständige Ganzzahleinheiten, eine Ganzzahleinheit mit eingeschränkten Funktionen und eine Gleitkommaeinheit.Oder ... (Sie haben die Idee).
Was Jörg W. Mittag gesagt hat.Sie haben mehrere Scheduler.Wenn der primäre Scheduler also nicht alle INTEGER- oder FLOAT-Einheiten verwendet, kann ein sekundärer Scheduler einen anderen Thread mit diesen nicht verwendeten Einheiten ausführen.Dies ist auch der Grund, warum einige Workloads schneller und andere viel langsamer werden.Wenn die primäre Arbeitslast fast jede Einheit verwendet, kann der sekundäre "Hyperthread" nichts erledigen, ohne auf diese Einheiten zu warten.Sie konkurrieren auch um andere gemeinsam genutzte Dinge wie Cache- und Speicherverkehr.Wenn sie also nicht genug nützliche Arbeit produzieren, um die neue Cache-Konkurrenz zu rechtfertigen, ist sie langsamer.
@JörgWMittag: Sie meinen [Architectural_state] (https://en.wikipedia.org/wiki/Architectural_state)?
Ja.Es ist üblich, dass Kerne doppelte / redundante Ausführungseinheiten haben, um die Parallelität auf Befehlsebene innerhalb eines einzelnen Threads auszunutzen.Das Ziel von Hyperthreading ist es, einem zweiten Thread zu ermöglichen, einige dieser Ressourcen zu verwenden, wenn der erste Thread dies nicht kann, weil er nicht über den optimalen Befehlsmix verfügt oder darauf wartet, eine Datenabhängigkeit oder einen Cache-Fehler zu beheben.
Gute Antwort, aber es ist wahrscheinlich besser, den Begriff SMT (Simultaneous Multithreading) anstelle des Intel-spezifischen Hyper-Threading zu verwenden.


Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 4.0-Lizenz, unter der er vertrieben wird.
Loading...