Einzelanweisung, mehrere Threads

Einzelanweisung, mehrere Threads (Simt) ist ein Ausführungsmodell in verwendet in Parallele Computing wo Einzelanweisung, mehrere Daten (SIMD) wird mit kombiniert mit Multithreading. Es ist anders als SPMD In diesem Anweisungen werden alle Anweisungen in allen "Threads" in Sperrenschritt ausgeführt. Das SIMT -Ausführungsmodell wurde auf mehreren implementiert GPUS und ist relevant für Allzweck-Computing auf Grafikverarbeitungseinheiten (GPGPU), z. etwas Supercomputer Kombinieren Sie CPUs mit GPUs.

Die Prozessoren, sagen eine Nummer p von ihnen scheinen viel mehr auszuführen als p Aufgaben. Dies wird von jedem Prozessor mit mehreren "Threads" (oder "Work-Items" oder "Sequenz von Simd Lane Operations") erreicht, die in Schloss-Schritt ausgeführt werden und analog sind zu Simd Gassen.[1]

Der einfachste Weg, SIMT zu verstehen, besteht darin Alus (Sowohl SIMD als auch Scalar) als auch sein eigener Datencache, aber im Gegensatz zu einem Standard-Multi-Core-System, das mehrere unabhängige Anweisungen und Decoder sowie mehrere unabhängige Programmzählerregister aufweist, sind die Anweisungen synchron Übertragung an alle Simt -Kerne von a Single Einheit mit einem einzigen Befehlscache und einem einzigen Befehlsdecoder, der Anweisungen mit einem einzelnen Programmzähler liest.

Der Schlüsselunterschied zwischen SIMT und Simd Gassen ist, dass jeder der SIMT -Kerne einen völlig anderen Stapelzeiger aufweisen kann (und somit Berechnungen für völlig unterschiedliche Datensätze durchführen), während die SIMD -Lanes einfach Teil eines ALU sind, die nichts über Speicher an sich wissen.

Geschichte

Simt wurde von vorgestellt von Nvidia in dem Tesla GPU -Mikroarchitektur mit dem G80 -Chip.[2][3] ATI -Technologien, jetzt AMD, veröffentlichte ein konkurrierendes Produkt etwas später am 14. Mai 2007, die Terascale 1-basierend "R600" GPU -Chip.

Beschreibung

Als Zugangszeit aller weit verbreiteten RAM Typen (z. DDR SDRAM, GDDR SDRAM, Xdr dramusw.) ist noch relativ hoch, Ingenieure haben die Idee entwickelt, die Latenz zu verbergen, die unvermeidlich mit jedem Speicherzugriff geliefert wird. Die Latenzheilung ist ein Merkmal der von Modern GPUs implementierten Zero-Overhead-Planung. Dies kann als Eigentum von 'Simt' selbst angesehen werden.

SIMT soll einschränken Anweisung abrufen Überkopf,[4] d.h. die Latenz, die mit Speicherzugriff einhergeht und im modernen GPUs verwendet wird (wie die von denen von Nvidia und AMD) In Kombination mit "Latenzverschließung", um die Hochleistungsausführung trotz erheblicher Latenz in den Vorgängen des Speichers zu ermöglichen. Hier wird der Prozessor mit Berechnungsaufgaben überprüft und kann schnell zwischen Aufgaben wechseln, wenn er sonst auf den Speicher warten müsste. Diese Strategie ist vergleichbar mit Multithreading in CPUs (nicht zu verwechseln mit Multi-Core).[5] Wie bei SIMD ist ein weiterer Hauptvorteil die gemeinsame Nutzung der Kontrolllogik vieler Datenspuren, was zu einer Zunahme der Rechendichte führt. Ein Block der Kontrolllogik kann n Datenspuren verwalten, anstatt die Kontrolllogik und die Zeiten zu replizieren.

Ein Nachteil der SIMT-Ausführung ist die Tatsache, dass ein threadspezifisches Kontrollfluss unter Verwendung von "Maskierung" durchgeführt wird, was zu einer schlechten Auslastung führt, bei der die Threads eines Prozessors unterschiedlichen Kontrollfluspfaden folgen. Zum Beispiel um mit einem umzugehen WENN-ANDERS Blockieren, wenn verschiedene Threads eines Prozessors unterschiedliche Pfade ausführen, müssen alle Threads tatsächlich beide Pfade verarbeiten (da alle Threads eines Prozessors immer in Sperrschritt ausgeführt werden), aber Maskierung wird verwendet, um die verschiedenen Threads nach Bedarf zu deaktivieren und zu aktivieren. Die Maskierung wird vermieden, wenn der Kontrollfluss für die Fäden eines Prozessors kohärent ist, d. H. Sie alle dem gleichen Ausführungsweg folgen. Die Maskierungsstrategie unterscheidet Simt von gewöhnlicher SIMD und hat den Vorteil einer kostengünstigen Synchronisation zwischen den Threads eines Prozessors.[6]

Simt -Terminologie
Nvidia CUDA OpenCL Hennessy & Patterson[7]
Faden Arbeitsmittel Abfolge von Simd Lane Operations
Kette Wellenfront Faden der SIMD -Anweisungen
Block Arbeitsgruppe Gremium der vektorisierten Schleife
Netz Ndrange Vektorisierte Schleife

Siehe auch

Verweise

  1. ^ Michael McCool; James Reinders; Arch Robison (2013). Strukturierte parallele Programmierung: Muster für eine effiziente Berechnung. Elsevier. p. 52.
  2. ^ "Nvidia Fermi Berechnung Architektur Whitepaper" (PDF). www.nvidia.com/. Nvidia Corporation. 2009. Abgerufen 2014-07-17.
  3. ^ Lindholm, Erik; Nickolls, John; Oberman, Stuart; Montrym, John (2008). "Nvidia Tesla: Eine einheitliche Grafik- und Computerarchitektur". IEEE MICRO. 28 (2): 6 (Abonnement erforderlich.). doi:10.1109/mm.2008.31.
  4. ^ Rel, Sean; Vandierendonck, Hans; D'Haene, Joris; De Bosschere, Koen (2010). Eine experimentelle Studie zur Leistungsträglichkeit von Opencl -Kerneln. Symp. Anwendungsbeschleuniger im Hochleistungs -Computing (SAAHPC). HDL:1854/LU-1016024.
  5. ^ "Fortgeschrittene Themen in Cuda" (PDF). cc.gatech.edu. 2011. Abgerufen 2014-08-28.
  6. ^ Michael McCool; James Reinders; Arch Robison (2013). Strukturierte parallele Programmierung: Muster für eine effiziente Berechnung. Elsevier. S. 209 ff.
  7. ^ John L. Hennessy; David A. Patterson (1990). Computerarchitektur: Ein quantitativer Ansatz (6 ed.). Morgan Kaufmann. pp.314 ff.