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".