2013-03-05 18 views
5

Qual è l'organizzazione di codice più facile da capire/efficiente ecc. Per cuda. Dopo alcune indagini ho scoperto che le dichiarazioni della funzione cuda dovrebbero essere nel file .cuh e le implementazioni risiedono nel file .cu e nelle implementazioni della funzione del kernel nei file .curnel. Altre cose C++ in file .cpp e .h ordinariamente. Recentemente ho pubblicato una domanda visual studio .cu file shows syntax error but compile successfully. Questa organizzazione è corretta? dove .cpp chiama .cu e chiama la funzione kernel in .curnel.modo efficiente di organizzazione dei file cuda: file .cpp .h .cu .cuh .curnel

+4

file 'curnel'? Mi considero come ragionevolmente esperto con CUDA e ho guardato molti progetti di altre persone, e non posso * mai * ricordare di aver visto un'unica estensione di file 'curnel'. Certamente non è niente che NVCC capisca o abbia una traiettoria predefinita per ... – talonmies

+0

Dipende da te, puoi raggruppare i file in base alla funzionalità, per tipo (.cu, .h, .cpp) o altri o combinarli (in gruppi di funzionalità è possibile mantenere insieme il file .cu). –

risposta

1

Come esempio, si supponga di avere un codice FDTD basato su GPU. Solitamente faccio quanto segue (Visual Studio 2010).

  • file main.cpp, inclusi i trasferimenti di memoria CPU-GPU;
  • FDTD.cu, inclusa una funzione extern "C" void E_update(...) che contiene la chiamata del kernel <<< >>>;
  • main.h, incluso il prototipo extern "C" void E_update(...);
  • FDTD.cuh, inclusa la funzione __global__ void E_update_kernel(...).
+0

Potresti fornire corpi per i file con implementazioni di funzioni vuote? Grazie! – Yola

5
  • h, cpp, c, HPP, inc - i file che non contengono il codice CUDA C (ad esempio __ dispositivo __ e altre parole chiave, le chiamate del kernel , ecc.) e non effettuare chiamate cuda runtime (funzioni cuda ...). È perfettamente bene chiamare le funzioni CUDA driver API (cu ...) da questi file. Si noti che è possibile compilare questi file con compilatori diversi da NVCC.
  • cu - File di origine CUDA C. Questi file vengono passati al compilatore NVCC per essere compilati in oggetti collegabili (host/dispositivo).
  • cu, cuinc - file inclusi nei file .cu. Questi file possono avere parole chiave CUDA C e/o richiamare funzioni di runtime CUDA.