HOME| CRESCO| Guide/tutorials| Contatti| F.A.Q.

Guide / tutorials

Total View debugger su Cresco



SOMMARIO:

  1. Introduzione
  2. Compilazione
  3. Debug tramite LSF
    1. Esempio 1: codici seriali
    2. Esempio 2: codici paralleli
  4. Links utili

1. Introduzione

Il debugger Total View, installato su Cresco, permette il debug e l'analisi di codici sia seriali che paralleli. Scopo di questa guida non è quello di mostrarne le potenzialità, le caratteristiche o le modalità di debugging. A tale scopo si vedano guide e tutorials specifici (si veda il seguente tutorial: TV_tut per esempio). Invece qui si vogliono fornire i principali comandi e setting necessari per avviare il software sulla piattaforma CRESCO.

NOTA: Attualmente (Novembre 2018) Totalview e' alla versione 2018.1.12; e' stato installato sui nodi di Cresco4, Cresco5 e Cresco6; e' stato testato per Cresco6 e compilatori Intel17 con mpi_flavour/openmpi_intel17-3.1.2

NOTA: Per utilizzare Totalview occorre caricare il modulo 'totalview' con il comando module load totalview

NOTA: Licenze disponibili: Attualmente (Novembre 2018) Totalview dispone di 5 licenze disponibili quindi e' possibile utilizzare non piu' di 5 processi MPI o task (indipendentemente dal numero di core per task) in relazione all'utilizzo di tutti gli utenti contemporaneamente.

[sommario]


2. Compilazione

La compilazione per il debug necessita del flag -g, in modo da abilitare la generazione di informazioni simboliche che permettono di vedere il codice sorgente anzicchè il codice assembly. Inoltre devono essere disabilitate le flag di ottimizzazione per evitare che il compilatore "riscriva" certe sezioni di codice che potrebbero non coincidere con il sorgente (in questo caso usare l'opzione -O0).

Esempi:

Seriale:


gfortran -g -O0   -o prova.exe   prova.c

Paralello MPI:


mpicc -g -O0   -o prova_MPI.exe   prova_MPI.c

[sommario]


3. Debug tramite LSF

In generale, la stringa di sottomissione non differisce di molto rispetto alla sottomissione di qualunque Job interattivo, eccetto che per l'uso delle opzioni -XF e -a tv. La coda da utilizzare per il debug e' la cresco6_h4 che permette di lanciare totalview su 3 nodi di cresco6 (003-004-005).
Occorre considerare che questi nodi appartengono al gruppo di nodi di CRESCO6 dedicati ai job seriali con un massimo di 40 core per nodo; quindi al debug sono dedicati al massimo 8 core/nodo e quindi, per evitare di restare in pending, occorre usare l'opzione -R "span[ptile=8]". Come esempio si consideri il seguente comando di sottomissione:

bsub -n 16 -R "span[ptile=8]" -q cresco6_h4 -I -XF -a tv totalview ./hybrid-hello

Questo comando sottomette un job parallelo ibrido su 2 nodi con 8 core per nodo se si imposta OMP_NUM_THREADS=8

SERIALE

Dopo avere compilato opportunamente il codice seriale, si sottomette con:

bsub -I -XF -q cresco6_h4 <altre_bsub_options> -a tv totalview <nome_programma>

A questo punto salterà fuori la GUI di TotalView (vedi esempi sotto).

Esempio 1: codici seriali

Il codice seriale "tvEx1.c" esegue un prodotto tra matrici. Di seguito alcuni screenshot di una sessione Totalview.

A- Compilazione:

gcc -g -O0   -o tvEx1.x   tvEx1.c

B- Sottomissione:

bsub -I -XF -q cresco6_h4 -a tv totalview ./tvEx1.x

C- Debug:

Una volta visualizzata la GUI, si possono per esempio settare i breakpoints e avviare (tasto "Go") il debug. Fig. 1 mostra la GUI con il sorgente visibile nel pannello principale, in questo caso ho settato un breakpoint alla line 26 ed eseguito alcuni steps (tasto "Next") del ciclo "for", per vedere ("dive in to...") il contenuto dell'array "a". Fig. 2 mostra il contenuto dell'array "a", che puó esserre visualizzato con un doppio click sulla variabile.

Fig. 1: Esempio di Breakpoint per codice seriale.

Cresco project site

Fig. 2: Esempio di visualizzazione di una variabile per codice seriale.

Cresco project site

[sommario]


Parallelo MPI

Questo caso è del tutto analogo al precedente, eccetto il fatto che occorre dire ad LSF quanti slots allocare per il Job parallelo, ovverro va specificato il numero di task paralleli con l'opzione -n <n_procs>:

bsub -n <n_procs> -I _XF -a tv -q cresco6_h4 <altre_bsub_options> totalview <nome_programma>

Esempio 2: codici MPI parallelo

Il codice parallelo MPI d'esempio è HPL (High Performance Linpack) che risolve un sistema di equazioni lineari. Il nome dell'eseguibile è "xhpl".

A- Compilazione

: come per il caso seriale aggiungere "-g -O0" ai wrapper "mpicc".

B- Sottomissione:

bsub -n 16 -R "span[ptile=8]" -q cresco6_h4 -I -XF -a tv   totalview ./xhpl

C- Debug:

IMPORTANTE: adesso occorre dire a TotalView su quali hosts lanciare i processi allocati da LSF e l'agente da usare per il lancio dei tasks (sotto LSF, per Cresco è "blaunch").
Una volta comparsa la GUI, verrà visualizzata la finestra di dialogo "StartUp Parameters". Nella TAB "parallel" occorre specificare (vedi Fig. 3):

Fig. 3: StartUp parameters per codice parallelo: job parallelo ibrido su 2 nodi con 2 processi MPI per nodo

Cresco project site

Le Fig. 4 e 5, rappresentano un esempio di setting di un breakpoint e di visualizzazione di una struttura dati, rispettivamente. Fig. 4 mostra anche lo stack. Si noti, come mostra Fig. 5, come sia possibile selezionare anche il processo da monitorare e nel caso di programmi OpenMP i threads.

Fig. 4: Breakpoint su una chiamata di "xhpl"

Cresco project site


Fig. 5: visualizzazione dei valori di una struttura dati per "xhpl".

Cresco project site

[sommario]


4. Links utili

[sommario]


[top]


ultimo aggiornamento: 22/11/2018 | Fiorenzo Ambrosino, Salvatore Raia