Testi consigliati

Per approfondire la piattaforma di computazione parallela CUDA e il relativo modello di programmazione consultare:

Documenti ufficiali di NVIDIA che accompagnao il toolkit CUDA sono:


NSIGHT ECLIPSE

Di seguito i passi per sviluppare un progetto in CUDA C in ambiente mac o linux con NVIDIA® Nsight™ Eclipse Edition, l'IDE per lo sviluppo di applicazioni CUDA. Il vantaggio rispetto a Nsight di Visual Studio per windows è che è possibile sviluppare 'trasparentemente' le applicazioni su un sever remoto dotato di scheda GPU.

1. Creare un nuovo progetto

  1. Aprire l'app Nsight distribuita con il toolkit CUDA, scaricabile dal sito NVIDIA download (le istruzioni per l'installazione doc)
  2. Scegliere nuovo progetto come indicato

2. Dare un nome al progetto

  1. Il progetto apparirà col nome scelto all'interno del cuda-workspace che è stato indicato all'avvio dell'app

3. Scegliere la capability

  1. La compute capability specifica l'architettura della scheda GPU, è data nelle specifiche della scheda (oppure eseguire il programma deviceQuery distribuito nei samples)

4. Aggiungere un file

  1. Aggiungere un nuovo file e salvarlo con estensione .cu per i file CUDA e .c/.cpp per quelli in C/C++

5. Editare il file

  1. I file possono essere editati, compilati e il progetto eseguito dall'ambiente di sviluppo. Se la il PC su cui si lavora possiede una scheda GPU, tutte queste operazioni si possono svolgere in locale, altrimenti si può scegliere un server remoto, come spiegato di seguito

6. Aggiungere un sistema remoto

  1. Come si vede l'app consente di aggiungere un 'remote system' (per es. lagrange) contenete una scheda Nvidia e sul quale deve essere installato il toolkit (in sostanza vengono usati i tool del server per compilazione e profilazione)
  2. Per aggiungere una macchina (via SSH) occorre avere un account e le credenziali per accedervi, dati che vengono richiesti in questa fase

7. Setup dei tool del server

  1. Viene richiesto di specificare il 'work-space' nel filesystem remoto (navigando con l'uso di finestra grafica)
  2. Si deve localizzare il 'toolkit' del sistema remoto (con navigazione + autodetection) da impiegare per tutti i compiti citati

8. Switch tra target remoti

  1. E' possibile scegliere tra i diversi target (compreso quello locale) per compilare il progetto
  2. Lo switch comporta anche la ricompilazione automatica del progetto nel sistema di destinazione
  3. Come si vede in figura, Nsight crea in automatico per ogni sistema due versioni del proogetto: Debug e Release. Nella prima i parametri di compilazione abilitano il debugging, su cui si può attivare il tool cuda-GDB. Nella seconda i parametri di default sono quelli di ottimizzazione del codice da parte del compilatore

9. Creare un laucher

  1. Dal menu 'Run configuration' è possibile definire un launcher per eseguire l'applicazione remota o locale.
  2. Navigare sul sistema per scegliere l'eseguibile (tipicamente sotto la dir Debug o Release) creato a valle della compilazione

10. Console per i risultati

  1. I risultai di compilazione e di esecuzione sono riportati dalla console (finestra sottostante)
  2. La console riporta anche i comandi di compilazione, linking ed esecuzione impiegati dai tool CUDA, completi dei rispettivi parametri di invocazione del comando

NSIGHT VISUAL STUDIO

Di seguito i passi per sviluppare un progetto in CUDA C in ambiente Windows con NVIDIA® Nsight™ Visual Studio, l'IDE per lo sviluppo di applicazioni CUDA.

1. Creare un nuovo progetto

  1. Aprire l'app Visual Studio contenete l'estensione Nsight distribuita con il toolkit CUDA, scaricabile dal sito NVIDIA download (le istruzioni per l'installazione doc)
  2. Scegliere nuovo progetto come indicato

2. Dare un nome al progetto

  1. Il progetto apparirà col nome scelto all'interno del cuda-workspace presente nel filesystem utente

4. Aggiungere un file

  1. Aggiungere un nuovo file scegliendo 'Add new item'.

5. Scegliere il tipo di file

  1. Scegliere il tipo di file. La prima scelta specifica un file o modulo contenete codice sorgente, la seconda un file header contente le principali dichiarazioni e definizioni, come d'uso in C/C++.

6. Editare il file

  1. I file possono essere editati e compilati in locale direttamente dall'IDE.
  2. Se la il PC su cui si lavora possiede una scheda GPU, allora il progetto può essere anche eseguito dall'ambiente di sviluppo. Altrimenti si può scegliere un server remoto su cui eseguire, come spiegato di seguito.

7. Compilazione

  1. Scegliere di effettuare la build del progetto dal relativo menu (questo è sempre possibile anche se il PC non possiede una scheda NVIDIA GPU).

8. Output dei risultati

VB Nsight crea in automatico per ogni sistema target scelto due versioni del progetto: Debug e Release. Nella prima i parametri di compilazione abilitano il debugging, su cui si può attivare il tool cuda-GDB. Nella seconda i parametri di default sono quelli di ottimizzazione del codice da parte del compilatore e serve per le simulazioni effettive giacché più efficiente.

  1. I risultati della compilazione, esecuzione o di altre operazioni vengono visualizzati nella finestra di Output (qui si mostra la versione Debug).

9. Definizione delle proprietà

  1. Il setup dell'applicazione si effettua attarverso la finestra delle proprietà del progetto (tasto destro sul file nome del progetto), che comprendono i parametri di compilazione, linking, esecuzione e molti altri.

10. Scegliere la capability

  1. La compute capability specifica l'architettura della scheda GPU, è normalmente indicta nelle specifiche della scheda (oppure ricavarle dal programma deviceQuery distribuito nei samples)

9. Client SSH per connessioni a Linux

Esistono numerose applicazioni per l'emulazione dell'ambiente Linux in M. Windows. MobaXterm è uno di questi ed è un completo client SSH per Windows dotato di numerose funzionalità, compreso l'X server grafico per avviare le applicazioni Linux. Di seguito si mostra come usare MobaXterm per accedere via SSH a Lagrange, compilare ed eseguire un'applicazione CUDA usando il terminale.

  1. Il terminale che si vede in figura è l'emulazione di un Xterm Linux mediante il quale è possibile eseguire comandi in locale oppure in remoto, come per es. attivare una connessione per mezzo del client SSH.

10. Trasferimento file

  1. E' possibile avviare una sessione per il trasferimento (usando la trasmissione sicura sftp compresa in MobaXterm) di file dal PC al server Lagrange e viceversa.
  2. Nell'esempio si mostra il trasferimento dei file prodotti da VB Nsight (sinistra) sotto l'omologa directory di Lagrange (destra)

11. Compilazione ed esecuzione remote

  1. A trasferimento avvenuto, è possibile compilare impiegando il compilatore nvcc locale i file di progetto (per avere i file binari corretti) e successivamente eseguire l'applicazione sempre da linea di comando sullo stesso terminale.
  2. Per Lagrange, la connessione è stata effettuata con il comado 'ssh "nome_utente"@cuda.lagrange.di.unimi.it'