2011-10-08 12 views
11

Uso l'archivo CUDA 4.0, con un dispositivo Compute_Capability 2.0 (GTX460). Qual è la differenza tra il 'cubin' e il file 'ptx'? Penso che il cubin sia un codice nativo per la gpu, quindi questo è arch. specifica e il ptx è un linguaggio intermedio che viene eseguito su dispositivi Fermi (ad esempio Geforce GTX 460) tramite la compilazione JIT. Quando compilo una sorgente cu, posso scegliere tra il target ptx o cubin. Se voglio il file cubin, scelgo il "code = sm_20". Ma se voglio un file ptx io uso il "code = compute_20". E 'corretto?NVIDIA NVCC e CUDA: Cubin vs. PTX

+2

'.cubin' è un binario CUDA,' .ptx' è l'origine dell'assemblatore CUDA (testo) che viene passato all'assemblatore 'ptxas' –

risposta

17

aver mescolato le opzioni per selezionare una fase di compilazione (-ptx e -cubin) con le opzioni per controllare quali dispositivi a bersaglio (-code), così si dovrebbe rivedere la documentazione.

NVCC è il driver del compilatore NVIDIA. Le opzioni -ptx e -cubin sono utilizzate per selezionare fasi specifiche della compilazione, per impostazione predefinita, senza opzioni specifiche per fase nvcc tenterà di produrre un eseguibile dagli input. La maggior parte delle persone usa l'opzione -c per far sì che nvcc produca un file oggetto che verrà collegato in un file eseguibile dal linker di piattaforma predefinito, le opzioni -ptx e -cubin sono davvero utili solo se si utilizza l'API Driver. Per ulteriori informazioni sulle fasi intermedie, consultare il manuale di nvcc che viene installato quando si installa CUDA Toolkit.

  • L'output da -ptx è un file PTX in testo semplice. PTX è un linguaggio di assemblaggio intermedio per le GPU NVIDIA che non è stato ancora completamente ottimizzato e verrà successivamente assemblato al codice specifico del dispositivo (ad esempio, diversi dispositivi hanno conteggi di registro diversi, quindi l'ottimizzazione del PTX sarebbe errata).
  • L'output da -cubin è un file binario grasso che può contenere una o più immagini binarie specifiche del dispositivo nonché (facoltativamente) PTX.

L'argomento -code ha uno scopo diverso interamente. Ti inviterei a consultare la documentazione di nvcc che contiene diversi esempi, in generale ti consiglio di utilizzare l'opzione -gencode poiché consente un maggiore controllo e ti consente di scegliere come target più dispositivi in ​​un binario. Come un breve esempio:

  • -gencode arch=compute_xx,code=\'compute_xx,sm_yy,sm_zz\' cause nvcc per indirizzare tutti i dispositivi con capacità di elaborazione xx (che è il bit arch=) e per incorporare PTX (code=compute_xx) così come binari specifici dispositivi per sm_yy e sm_zz nel binario grasso finale .