23 Stimmen

Gibt es eine Assemblersprache für CUDA?

Ich frage das, weil ich weiß, dass es eine Möglichkeit gibt, Binärdateien anstelle von Quelldateien zu verwenden.

Außerdem vermute ich, dass es mit einer Assemblersprache einfacher wäre, Funktionszeiger zu simulieren. Es sei denn, die Assembler-Sprache auf einer GPU ist völlig anders als die auf einer CPU.

34voto

Patrick87 Punkte 26377

Vielleicht sollten Sie sich PTX ansehen. NVIDIA stellt in der CUDA 4.0-Dokumentation ein Dokument zur Verfügung, in dem es beschrieben wird.

http://developer.nvidia.com/nvidia-gpu-computing-documentation

NVIDIA beschreibt PTX als "Ta low-level parallel thread execution virtual machine and instruction set architecture (ISA)". PTX stellt den Grafikprozessor als datenparalleles Rechengerät dar." Das ist nicht gerade wie x86-Assembler, aber es könnte für Sie interessant sein.

20voto

ChrisV Punkte 3313

Es gibt tatsächlich zwei verschiedene CUDA Assemblierungssprachen.

PTX ist eine maschinenunabhängige Assemblersprache, die zu SASS kompiliert wird, den tatsächlichen Opcodes, die auf einer bestimmten GPU-Familie ausgeführt werden. Wenn Sie .cubins erstellen, haben Sie es mit SASS zu tun. Die meisten CUDA-Laufzeitanwendungen verwenden PTX, da sie dadurch auf Grafikprozessoren ausgeführt werden können, die nach der ursprünglichen Anwendung freigegeben wurden.

Außerdem gibt es Funktionszeiger in CUDA schon seit einer Weile, wenn Sie sm_20 (Fermi/GTX 400 Serie) anvisieren.

16voto

jalf Punkte 235501

Ja, der Aufbau eines Grafikprozessors ist völlig anders als der einer CPU. Einer der Unterschiede ist, dass der Befehlssatz für einen Grafikprozessor nicht standardisiert ist. NVidia (und AMD und andere GPU-Anbieter) können ihren Befehlssatz von einem GPU-Modell zum nächsten ändern und tun dies auch.

CUDA stellt also keine Assemblersprache zur Verfügung. Das hätte keinen Sinn. (Und die Beschränkungen im C-Dialekt von CUDA und den anderen unterstützten Sprachen sind durch die Beschränkungen der GPU-Hardware bedingt, nicht nur, weil Nvidia Sie hasst und Sie ärgern will. Selbst wenn man also direkten Zugriff auf den zugrundeliegenden Befehlssatz und die Assemblersprache hätte, wäre man nicht in der Lage, auf magische Weise Dinge zu tun, die man jetzt nicht tun kann.

(Beachten Sie, dass NVidia einen "virtuellen" Befehlssatz definiert, den Sie verwenden und in Ihren Code einbetten können. Aber es ist nicht die Befehlssatz, der nicht direkt auf die Hardware-Befehle abgestimmt ist. Es ist kaum mehr als eine einfachere Programmiersprache, die wie ein Dialekt von Assembler "aussieht".

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X