From 67684e14b98421cc28b368d93f4ba31b5a3f126c Mon Sep 17 00:00:00 2001 From: Salvatore Filippone Date: Thu, 2 Mar 2006 10:50:10 +0000 Subject: [PATCH] Take out internal development notes. --- Make.inc | 27 ++++++------ littledoc.txt | 118 -------------------------------------------------- notes | 73 ------------------------------- 3 files changed, 14 insertions(+), 204 deletions(-) delete mode 100644 littledoc.txt delete mode 100644 notes diff --git a/Make.inc b/Make.inc index bfcd7b62..8d4c334d 100644 --- a/Make.inc +++ b/Make.inc @@ -6,40 +6,41 @@ ####################### Section 1 ####################### # Define your compilers and compiler flags here # ########################################################## -F90=${IFC8}/bin/ifort -FC=${IFC8}/bin/ifort +F90=/usr/local/gfortran/bin/gfortran +FC=/usr/local/gfortran/bin/gfortran F77=$(FC) -CC=gcc -F90COPT= -O3 -FCOPT=-O3 -CCOPT=-O3 +CC=/usr/local/gfortran/bin/gcc +F90COPT= -O3 -ffast-math -march=pentium4 -msse2 -mfpmath=sse +FCOPT=-O3 -ffast-math -march=pentium4 -msse2 -mfpmath=sse +CCOPT=-O3 -ffast-math -march=pentium4 -msse2 -mfpmath=sse ####################### Section 2 ####################### # Define your linker and linker flags here # ########################################################## -F90LINK=/usr/local/mpich-ifc80/bin/mpif90 -g -CB -no_cpprt -FLINK=/usr/local/mpich-ifc80/mpif77 -g -CB -no_cpprt -MPF90=/usr/local/mpich-ifc80/bin/mpif90 -g -CB -no_cpprt -MPCC=/usr/local/mpich-ifc80/bin/mpicc -g -CB -no_cpprt +F90LINK=/usr/local/mpich-gfortran/bin/mpif90 +FLINK=/usr/local/mpich-gfortran/mpif77 +MPF90=/usr/local/mpich-gfortran/bin/mpif90 +MPCC=/usr/local/mpich-gfortran/bin/mpicc ####################### Section 3 ####################### # Specify paths to libraries # ########################################################## -BLAS=-lblas-intel -L$(HOME)/NUMERICAL/LIB -BLACS=-lmpiblacs-intel -L$(HOME)/NUMERICAL/LIB +BLAS=-lblas-gcc41 -L$(HOME)/LIB +BLACS=-lmpiblacs-gfortran -L$(HOME)/LIB ####################### Section 4 ####################### # Other useful tools&defines # ########################################################## SLUDIR=/usr/local/SuperLU_3.0 -SLU=-lslu_lx_ifc8 -L$(SLUDIR) +SLU=-lslu_lx_gfort -L$(SLUDIR) SLUDEF=-DHave_SLU_ -I$(SLUDIR) UMFDIR=$(HOME)/LIB/Umfpack_gcc41 UMF=-lumfpack -lamd -L$(UMFDIR) UMFDEF=-DHave_UMF_ -I$(UMFDIR) +# Add -DLargeFptr for 64-bit addresses CDEFINES=-DAdd_ $(SLUDEF) $(UMFDEF) AR=ar -cur diff --git a/littledoc.txt b/littledoc.txt deleted file mode 100644 index d6d57236..00000000 --- a/littledoc.txt +++ /dev/null @@ -1,118 +0,0 @@ -L'inizializzazione del sistema prevede, ora, che l'assemblaggio del -descrittore e quello della matrice possano essere eseguiti -indipendentemente. -Durante la sua vita, il descrittore può trovarsi in due differenti -stati: - 1. bld: stato di build. in questo stato è possibile aggiornare il - contenuto del descrittore attraverso la routine psb_dscins. - 2. asb: stato assembled. questo è lo stato della rappresentazione - finale del descrittore ed è raggiunto a valle di una chiamata alla - routine psb_dscasb. - -Durante la sua vita, la matrice può trovarsi in tre differenti -stati: - 1. bld: stato di build. in questo stato è possibile aggiornare il - contenuto dela matrice attraverso la routine psb_spins. - 2. asb: stato assembled. questo è lo stato della rappresentazione - finale della matrice ed è raggiunto a valle di una chiamata alla - routine psb_spasb. - 3. upd: stato di update. è lo stato in cui è possibile (attraverso - una chiamata alla routine psb_spasb) rigenerare la matrice. - - -- Assemblaggio contestuale di matrice e descrittore - - Il procedimento da seguire prevede il seguente ordine di chiamate: - 1. psb_dscall: allocazione del descrittore. Alla fine di questo - step lo stato del descrittore sarà bld - 2. psb_spall: allocazione della matrice. Alla fine di questo - step lo stato della matrice sarà bld - 3. psb_spins: in questo caso sia il descrittore che la matrice - saranno nello stato bld. Quindi la psb_spins invoca la - psb_dscins per portare il descrittore in uno stato pre-asb e - poi effettivamente inserisce i coefficienti nella - matrice (che quindi sarà anch'essa in uno stato - pre-asb). Dunque, nel caso di costruzione/assemblaggio - contestuale di matrise e descrittore, il contenuto del - descrittore è implicitamente aggiornato da questa - chiamata. (nel caso separato bisognerà esplicitamente - prevedere questa fase attraverso una chiamata alla psb_dscins) - 4. psb_dscasb: il descrittore viene assemblato e quindi portato - allo stato asb. - 5. psb_spasb: la matrice viene assemblata e quindi portata - allo stato asb. - - -- Assemblaggio di descrittore e matrice indipendenti - - Il procedimento da seguire per costruire/assemblare il descrittore - prevede il seguente ordine di chiamate: - 1. psb_dscall: allocazione del descrittore. Alla fine di questo - step lo stato del descrittore sarà bld - 2. psb_dscins: il descrittore viene inizializzato a partire dal - pattern di sparsità della matrice e dal partizionamento. Alla - fine di questo step sarà in uno stato pre-asb - 3. psb_dscasb: il descrittore viene assemblato e quindi portato - allo stato asb. - - Il procedimento da seguire per costruire/assemblare la matrice - prevede il seguente ordine di chiamate: - 1. psb_spall: allocazione della matrice. Alla fine di questo - step lo stato della matrice sarà bld - 2. psb_spins: i coefficienti vengono effettivamente inseriti - nella matrice che sarà portata ad uno stato pre-asb. - 3. psb_spasb: la matrice viene assemblata e quindi portata - allo stato asb. - - -- Aggiornamento della matrice - Se il pattern di sparsità della matrice non cambia, la matrice può - essere aggiornata attraverso il seguente procedimento: - 1. psb_sprn: reinizializza la matrice. Alla fine di questo step - la matrice sarà nello stato upd - 2. psb_spins: i coefficienti della matrice vengono reinseriti - 3. psb_spasb: la matrice viene assemblata e riportata nello stato - asb. - - - -La gestione degli errori - - La nuova gestione degli errori prevede la creazione di uno stack di - messaggi di errore che possa consentire di seguire a ritroso la - sequenza di chiamate di routine fino ad arrivare a quella in cui - l'errore è stato rilevato. Tutte le nuove interfacce prevedono un - argomento "info" il quale ritorna un valore > 0 se all'interno della - routine chiamata è stato rilevato un errore. Dunque ogni volta che - si rileva una condizione di errore (o per verifica diretta o perchè - una routine chiamata ha ritornato info>0) occorre mettere l'errore - in cima allo stack per mezzo della routine - psb_errpush(info,name,i_err,a_err) in cui: - info: codice di errore (si veda SRC/F90/errormod.f90 per una - corrispondenza codice-messaggiodierrore) - name: stringa di lunghezza 20 contenente il nome della routine - che invoca la psb_errpush() - i_err: opzionale. E' un array di 5 interi contenente informazioni - aggiuntive per il messaggio di errore (si veda errormod.f90) - a_err: opzionale. E' una stringa di 20 contenente informazioni - aggiuntive per il messaggio di errore (si veda errormod.f90) - - attraverso la routine psb_seterrverbosity si può impostare la - verbosità del messaggio d'errore (se =1 viene stampato solo l'errore - in cima allo stack; se >1 vengono stampati tutti) - - la routine psb_error(ictxt) provoca la stampa degli (dell') errori - (errore) sullo stack ed, eventualmente, stronca il set di processi. - l'argomento ictxt è opzionale: se è assente viene semplicemente - stampato il messaggio d'errore altrimenti viene anche abortita - l'esecuzione di tutti i processi. - - la routine psb_seterraction(action) determina quale azione deve essere - intrapresa a fronte del rilevamento di un errore: - action =0 : la routine in cui è stato rilevato un errore (e quindi - dopo che l'errore stesso sia stato inserito sullo stack) - semplicemente ritorna al chiamante un codice di errore - action =1 : la routine in cui è stato rilevato un errore (e quindi - dopo che l'errore stesso sia stato inserito sullo stack) - prima di ritornare invoca la psb_error (e quindi, può, eventualmente - stroncare l'esecuzione di tutti i processi). diff --git a/notes b/notes deleted file mode 100644 index 59719ffc..00000000 --- a/notes +++ /dev/null @@ -1,73 +0,0 @@ -Struttura: -psblas: -psblas/src: la directory contenente il codice sorgente -psblas/src/comm: contiene tutte le routine preposte allo scambio di - dati -psblas/src/internals: contiene una serie di routine utilizzate per - l'assemblaggio dei descrittori di comunicazione e per - lo scambio di dati (psi_dswap_data e psi_dswap_tran) -psblas/src/methd: contiene l'implementazione dei metodi iterativi -psblas/src/modules: contiene i moduli con le interfacce, le - definizioni di tipi e di costanti -psblas/src/prec: contiene tutte le routine preposte alla generazione e - applicazione dei precondizionatori -psblas/src/psblas: contiene le routine algebriche parallele -psblas/src/serial: contiene l'implementazione seriale di routine - algebriche e ausiliarie -psblas/src/serial/aux: routine ausiliarie (in realtà c'è rimasto be poco) -psblas/src/serial/coo: routine relative al formato coo -psblas/src/serial/csr: routine relative al formato csr -psblas/src/serial/dp: routine per l'assemblaggio e la conversione da - un formato all'altro -psblas/src/serial/f77: si tratta delle routine algebriche. queste - vengono chiamate all'interno delle routine in - psblas/src/psblas. -psblas/src/serial/jad: routine relative al formato jad -psblas/src/tools: tutte le routine per la generazione e rigenerazione - di descrittori e matrici -psblas/test: programmi di test - - -Schema di nomenclatura: -tutti i simboli (quindi routine, tipi dato, costanti, moduli etc...) -devono avere il prefisso psb_. I tipi hanno il suffisso "_type" (quindi -quello che prima era d_spmat adesso diventa psb_dspmat_type), tutti i -moduli hanno il suffisso "_mod". - - -Interfacce subroutine & argomenti: -l'articolo di Carney et al. richiede questa convenzione per l'ordine -degli argomenti: -1- arguments specifying options (tipo TRANS, UNITD etc...) -2- arguments specifying problem dimensions -3- input scalar associated with input matrices -4- description of sparse input matrices (che sarebbe i nostri FIDA e - DESCRA) -5- description of dense input matrices -6- input scalar associated with input-output matrices -7- description of input-output matrices -8- error processing informations -9- workspace -10- length of workspace - -tutto questo va rivisto nell'ottica f90 e, quindi, con i tipi dato -user-defined e con gli argomenti opzionali. -Attualmente, in linea di massima, le interfacce delle routine -algebriche hanno sempre desc_a (il descrittore) e info (il codice di -errore riportato) nelle ultime posizioni prima dei parametri -opzionali. I parametri opzionali contengono sempre gli argomenti al -punto 1 oltre che jx, jy e k che definiscono il sottopreblema su cui -effettuare l'operazione richiesta. Per tutto il resto non c'è uno -schema ben definito e viene, generalmente seguito l'ordine con cui gli -operandi appaiono nella scrittura della formula matematica relativa -all'operazione implementata nella subroutine. si potrebbe pensare a -come risistemare la cosa ma secondo me è abbastanza chiara. - - - - - - - - -