tutorial - install cuda ubuntu command line




Come posso compilare il codice CUDA e collegarlo ad un progetto C++? (2)

Sto cercando aiuto per iniziare un progetto che coinvolge CUDA. Il mio obiettivo è avere un progetto che possa essere compilato nel compilatore nativo di g ++ ma che usi il codice CUDA. Capisco che devo compilare il mio codice CUDA nel compilatore nvcc, ma dalla mia comprensione posso in qualche modo compilare il codice CUDA in un file cubin o in un file ptx.

Ecco le mie domande:

  1. Come posso usare nvcc per compilare un file cubin o un file ptx? Non ho bisogno di un -c o qualcosa?
  2. Quale tipo di file voglio usare?
  3. Quali sono i comandi di g ++ per compilare e collegare correttamente il progetto insieme?

Supponiamo quanto segue:

  1. Ho un file chiamato "main.cpp" che ha una funzione principale in esso e include cuda.h.
  2. Ho un altro file chiamato "cudaFunc.cu" che contiene il codice CUDA. Diciamo, per esempio, che voglio aggiungere due array di interi che esistono in main.cpp.

Ho scoperto che il collegamento del codice oggetto cuda compilato con g ++ può essere problematico. Prova a compilarlo in questo modo:

all:
nvcc cudafile.cu mainfile.cpp -o executable

clean: rm -rf *.o

La mia risposta a questa domanda recente descrive probabilmente ciò di cui hai bisogno.

Un paio di note aggiuntive:

  1. Non è necessario compilare il tuo .cu in un file .cubin o .ptx. Devi compilarlo in un file .o object e collegarlo con i file .o object dai tuoi file .cpp compilati con g ++.
  2. Oltre a inserire il codice del kernel CUDA in cudaFunc.cu, è necessario anche inserire una funzione wrapper C o C ++ in quel file che avvia il kernel (a meno che non si stia utilizzando l'API del driver CUDA, che è improbabile e sconsigliata). Aggiungi anche un file di intestazione con il prototipo di questa funzione wrapper in modo da poterlo includere nel codice C ++ che deve chiamare il codice CUDA. Quindi colleghi i file insieme usando la tua linea di collegamento standard g ++.

Sto iniziando a ripetere la mia altra risposta , quindi consiglio di leggerlo. :)