2016-06-11 8 views
0

Von der question ist bekannt, dass PTX über verschiedene Architekturen portierbar ist. Ich glaube, dass dies die Migration von: sm_20 zu sm_30 ermöglicht. Ich habe einen speziellen Anwendungsfall, um von sm_20 zu sm_10 zu gelangen. So ist es möglich, mit einem PTX, der für das Ziel sm_20 kompiliert wurde, eine Binärdatei wie beispielsweise cubin für das Ziel sm_10 zu erzeugen.Kompilieren von CUDA PTX zu binär für ein älteres Ziel

Antwort

4

PTX ist vorwärts kompatibel, wenn sie gegen eine bestimmte Architektur kompiliert (d.h. unter Verwendung des sm_* Flag), aber es ist nicht rückwärtskompatibel. Eine Möglichkeit, um darüber hinwegzukommen, besteht darin, eine bestimmte virtuelle Architektur anzugeben und dann Binärbilder für alle realen Architekturen zu generieren, auf die Sie gezielt abzielen. Zum Beispiel

nvcc -arch=compute_20 -code=sm_20,sm_30,sm_35 

erzeugt PTX für die Rechen- 2.0 virtuelle Architektur und erzeugen Binärbildern für 2,0, 3,0 und 3,5-Geräte. Bitte beachten Sie, dass compute 1.0 ab CUDA 7.0 veraltet ist. Dies ist als fat binary Ansatz bekannt.

Siehe code generation options für den Unterschied zwischen realen und virtuellen Architekturen.


EDIT: Eigentlich ist es ein bisschen überflüssig -arch=compute_35 und -code=sm_35 angeben, da der JIT-Compiler und baute es für Sie interveniert hätte. Solange es Ihnen nichts ausmacht, ein wenig zusätzliches Fett in Ihrem Fett-Doppelstern zu nehmen, dann ist es wohl nicht so wichtig.

EDIT2: codeMuss größer oder gleich arch weil PTX nicht rückwärtskompatibel ist. Danke an Robert Crovella für den Hinweis auf diesen dummen Fehler.

+0

@RobertCrovella Ich kann nicht glauben, dass ich das geschrieben habe. Es ist fast so, als ob ich nicht den ersten Satz gelesen hätte, den ich geschrieben habe. Danke, dass du meinen dummen Fehler aufgezeigt hast. – Tim