2011-09-08 1 views
13

Lo sto chiedendo perché so che c'è un modo di usare file binari invece di file sorgente.Esiste un linguaggio assembly per CUDA?

Inoltre, suppongo che con un linguaggio assembly, sarebbe più facile simulare i puntatori di funzione. A meno che l'assembly su una GPU sia completamente diverso da quello su una CPU.

+0

Cosa c'è che non va con C per CUDA? http://developer.download.nvidia.com/compute/cuda/2_1/toolkit/docs/NVIDIA_CUDA_Programming_Guide_2.1.pdf –

+4

Ho risposto poche settimane fa [in una risposta a "È possibile inserire istruzioni nel codice CUDA?" ] (http://stackoverflow.com/questions/3677220/is-it-possible-to-put-instructions-into-cuda-code/7072079#7072079). * Nota: * non la risposta accettata, ma una che è arrivata dopo. – dmckee

+0

@dmckee +1. Inoltre, poiché i puntatori di funzione CUDA 3.2 (e 2.0-dispositivi) sono supportati senza interferire con ptx. E i dispositivi più vecchi non hanno semplicemente funzioni di dispositivo - tutte le chiamate alle funzioni '__device__' dal kernel sono state sottolineate. – aland

risposta

29

si potrebbe voler dare un'occhiata a PTX. NVIDIA fornisce a documento che lo descrive nella documentazione di CUDA 4.0.

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

NVIDIA descrive PTX come "Ta basso livello esecutivo cilindrico architettura virtuale macchina e set di istruzioni (ISA). PTX espone la GPU come un dispositivo di elaborazione dati in parallelo." Non esattamente come l'assembly x86, ma potresti trovare interessante la lettura.

+10

Vale la pena sottolineare che PTX è un set di istruzioni virtuali. Ogni distinta architettura NVIDIA ha il proprio ISA fisico a cui PTX si rivolge.È possibile integrare le istruzioni PTX nel codice CUDA analogamente a inline x86 asm. –

12

Sì, l'assembly su una GPU è completamente diverso da quello di una CPU. Una delle differenze è che il set di istruzioni per una GPU non è standardizzato. NVidia (e AMD e altri fornitori di GPU) possono e fanno cambiare il loro set di istruzioni da un modello di GPU al successivo.

Quindi CUDA non espone un linguaggio assembly. Non avrebbe senso (E le limitazioni nel dialetto C di CUDA e in qualsiasi altro linguaggio supportino sono presenti a causa delle limitazioni nell'hardware della GPU, non solo perché Nvidia ti odia e vuole infastidirti. Quindi, anche se tu avessi accesso diretto al set di istruzioni sottostante e linguaggio assembly, non saresti in grado di fare magicamente cose che non puoi fare ora.

(Nota che c'è NVidia che definisce un set di istruzioni "virtuale" che puoi usare e incorporare nel tuo codice. non il set di istruzioni, e non la mappa direttamente alle istruzioni hardware. e 'poco più di un linguaggio di programmazione più semplice che "si presenta come" un dialetto di assemblaggio

+1

oh! buono a sapersi ... se non posso nemmeno aspettarmi che quel codice funzioni su GPU diverse ... è sicuramente l'approccio sbagliato! Grazie – widgg

+0

Il tuo codice CUDA funzionerà bene su diverse GPU. CUDA lo compila semplicemente su un target adatto per ogni GPU. – jalf

15

Esistono infatti due diversi linguaggi di assemblaggio CUDA.

PTX è un linguaggio di assemblaggio indipendente dalla macchina che viene compilato in SASS, gli opcode effettivi eseguiti su una particolare famiglia di GPU. Se costruisci .cubin, hai a che fare con SASS. La maggior parte delle applicazioni di runtime CUDA utilizza PTX, poiché consente loro di eseguire su GPU rilasciate dopo l'applicazione originale.

Inoltre, i puntatori di funzione sono stati in CUDA per un po 'se si sta mirando sm_20 (serie Fermi/GTX 400).