Ich dachte immer, dass Zweig Divergenz nur durch den Verzweigungscode verursacht wird, wie „if“, „else“, „für“, „Switch“, etc. Aber ich ein Papier vor kurzem, in dem gelesen haben heißt es:In CUDA verursachen nicht zusammengewachsene Speicherzugriffe Verzweigungsdivergenz?
" Dies ist in der Regel die Ergebnisse von zusätzlichen nicht zusammengewachsenen Zugriffen auf die Globaler Speicher Eine solche Thread-Divergenz führt daher zu vielen Speicherzugriffen, die serialisiert werden müssen, wodurch die Gesamtzahl der ausgeführten Befehle erhöht wird
Man kann beobachten, dass die Anzahl der Warp-Serialisierungen für die Version, die nicht zusammengewachsene Zugriffe verwendet, zwischen sieben und sechzehn Mal wichtiger ist als für ihr Pendant. Tatsächlich führt eine Thread-Divergenz, die durch nicht zusammengewachsene Zugriffe verursacht wird, zu vielen Speicherzugriffen, die serialisiert werden müssen, was die auszuführenden Befehle erhöht. "
Es scheint so, nach Ansicht des Autors, nicht-koalesziert Zugriffe divergent Zweige führen kann. Ist das wahr? Meine Frage ist, wie genau viele Gründe für die Branche Divergenz da? Vielen Dank im Voraus.
Können Sie mit der ursprünglichen Referenz verknüpfen? – talonmies
+1 Ich möchte wirklich wissen, wie eine Speicherzugriffsstrategie für divergente Verzweigungen verantwortlich wäre. Bitte fügen Sie die Referenz hinzu. –
Diese These sollte die Referenz sein. Die 2 Paragraphen stammen von p80 bzw. p107. http://mistic.heig-vd.ch/luong/thesis.pdf – kangshiyin