Ich versuche herauszufinden, warum cudaMemcpyFromSymbol()
existiert. Es scheint, dass alles, was "Symbol" func tun kann, das nonSymbol cmds tun kann.
Das Symbol func scheint es zu erleichtern, einen Teil eines Arrays oder Index zu verschieben, aber dies könnte genauso gut mit der nonSymbol-Funktion geschehen. Ich vermute, dass das NonSymbol-Verfahren schneller ausgeführt wird, da keine Symbolsuche benötigt wird. (Es ist nicht klar, ob die Symbolsuche zur Kompilier- oder Laufzeit durchgeführt wird.)
Warum sollte ich cudaMemcpyFromSymbol()
vs cudaMemcpy(
) verwenden?
cudaMemcpyFromSymbol
ist die kanonische Methode, um von einer statisch definierten Variable im Gerätespeicher zu kopieren.
cudaMemcpy
kann nicht direkt zum Kopieren von oder zu einer statisch definierten Gerätevariable verwendet werden, da hierfür ein Gerätezeiger erforderlich ist und der Hostcode zur Laufzeit nicht bekannt ist. Daher ist ein API-Aufruf erforderlich, der die Gerätekontext-Symboltabelle abfragen kann. Die beiden Auswahlmöglichkeiten sind entweder cudaMemcpyFromSymbol
, das das Symbol in einer Operation nachschlägt und kopiert, oder cudaGetSymbolAddress
, die eine Adresse zurückgibt, die an cudaMemcpy
übergeben werden kann. Ersteres ist wahrscheinlich effizienter, wenn Sie nur eine Kopie erstellen wollen, letzteres, wenn Sie die Adresse mehrmals im Host-Code verwenden möchten.
Tags und Links cuda