Warum kopieren die letzten zwei Zeilen Daten? Haben GPU und CPU nicht beide aktuellen Inhalt?
.gpu_data
und .cpu_data
werden in Fällen verwendet, in denen data
nur als Eingabe verwendet wird und nicht vom Algorithmus geändert wird. .mutable_*
wird verwendet, wenn die Daten selbst beim Ausführen des Algorithmus aktualisiert werden.
Wann auch immer die Daten aufgerufen werden, wird überprüft, ob die vorherige Anweisung ein mutable_*
Funktionsaufruf war und dass auch der gleiche Prozessor (GPU oder CPU) verwendet wurde. Wenn derselbe Prozessor verwendet wird, müssen Daten nicht kopiert werden. Wenn der andere Prozessor verwendet wird, besteht die Möglichkeit, dass die Daten im vorherigen .mutable_*
-Aufruf aktualisiert wurden und daher eine Datenkopie erforderlich ist.
Bearbeiten 1 Wenn der vorherige Befehl "veränderbar" ist, muss die Datenkopie vor dem aktuellen Befehl erfolgen, wenn sich der aktuelle Befehl auf einem anderen Prozessor befindet.
In keinem anderen Fall findet die Datenkopie mit Ausnahme einer speziellen Anfangsbedingung statt, dh; wenn überhaupt keine Daten im GPU-Speicher vorhanden waren und daher eine Kopie der Daten vor dem Aufruf von * _gpu_data () stattfindet.
Tags und Links caffe