La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

BCX (user guide: https://hpc. cineca

Presentazioni simili


Presentazione sul tema: "BCX (user guide: https://hpc. cineca"— Transcript della presentazione:

1 BCX (user guide: https://hpc. cineca
Collegarsi alla macchina host: bc.bcx.cineca.it user: aco2cp02 password: hlz7xMaJ ( da linux collegarsi con ssh –X ) Creare una propria directory su SCRATCH in cui lavorare cd $CINECA_SCRATCH mkdir <nome directory> cd <nome directory> Caricare il modulo del compilatore module avail fornisce la lista di moduli disponibili (compilatori, tools, programmi, librerie) module load gnu/4.1.2 Per compilare: g++ main.cpp … –o <nome eseguibile>

2 Un esercizio: Matrix

3 Obiettivo Implementare un dato di tipo matrice che supporti le seguenti funzionalità: Scelta del tipo degli elementi; Scelta delle dimensioni; Accesso in lettura/scrittura ai singoli elementi; Stampa in forma tabellare. Mat = Si propongono varie implementazioni via via più evolute.

4 Procedurale inizialmente il problema viene risolto in forma procedurale definendo il dato come struttura e fornendo le opportune funzioni di gestione (allocazione/deallocazione, accesso, stampa). Il tipo degli elementi è scelto dallo sviluppatore. //main.cpp #include "matrix.h" int main(int argc, char *argv[]) { const int nrows = 4; const int ncols = 5; Matrix *mat; mat = MatrixCreate(nrows, ncols); for (int i = 0; i < nrows; i++) for(int j = 0; j < ncols; j++) MatrixSetValue(mat, i, j, 1 + j + i * ncols); MatrixPrint(mat); MatrixDestroy(mat); return 0; }

5 A oggetti Matrix mat(nrows, ncols);
Il dato viene definito come oggetto: le attività di allocazione/deallocazione vengono espletate nel costruttore/distruttore mentre le funzioni di accesso e stampa vengono tradotte nei corrispondenti metodi. //main.cpp #include "matrix.h" int main(int argc, char *argv[]) { const int nrows = 4; const int ncols = 5; Matrix mat(nrows, ncols); for (int i = 0; i < nrows; i++) for(int j = 0; j < ncols; j++) mat.SetValue(i, j, 1 + j + i * ncols); mat.Print(); return 0; }

6 Con riferimenti I metodi di accesso vengono unificati usando riferimenti agli elementi. //main.cpp #include "matrix.h" int main(int argc, char *argv[]) { const int nrows = 4; const int ncols = 5; Matrix mat(nrows, ncols); for (int i = 0; i < nrows; i++) for(int j = 0; j < ncols; j++) mat.Value(i, j) = 1 + j + i * ncols; mat.Print(); return 0; }

7 Con overloading I metodi di accesso e di stampa vengono semplificati sovraccaricando gli opportuni operatori. //main.cpp #include "matrix.h" int main(int argc, char *argv[]) { const int nrows = 4; const int ncols = 5; Matrix mat(nrows, ncols); for (int i = 0; i < nrows; i++) for(int j = 0; j < ncols; j++) mat(i, j) = 1 + j + i * ncols; cout << mat; return 0; }

8 Con classi derivate DenseMatrix densemat(nrows, ncols);
for (i = 0; i < nrows; i++) for(j = 0; j < ncols; j++) densemat(i, j) = 1 + j + i * ncols; cout << "dense matrix\n" << densemat; SparseMatrix sparsemat(nrows, ncols); for (i = 0; i < nrows; i++) if (i % 2 - j % 2) sparsemat(i, j) = 1 + j + i * ncols; cout << "sparse matrix\n" << sparsemat; return 0; } L’oggetto matrice viene specializzato nella versione densa e sparsa. L’operatore di accesso diviene puramente virtuale. Gli elementi vengono memorizzati negli opportuni contenitori della libreria standard. //main.cpp #include "densematrix.h" #include "sparsematrix.h" int main(int argc, char *argv[]) { const int nrows = 4; const int ncols = 5; int i, j;

9 e infine … parametriche
Le classi matrici vengono parametrizzate rispetto al tipo degli elementi in modo che questo possa essere scelto dall’utente. //main.cpp #include "densematrix.h" #include "sparsematrix.h" int main(int argc, char *argv[]) { const int nrows = 4; const int ncols = 5; int i, j; DenseMatrix<float> densemat(nrows, ncols); for (i = 0; i < nrows; i++) for(j = 0; j < ncols; j++) densemat(i, j) = 1 + j + i * ncols; cout << "dense matrix\n" << densemat; SparseMatrix<int> sparsemat(nrows, ncols); if (i % 2 - j % 2) sparsemat(i, j) = 1 + j + i * ncols; cout << "sparse matrix\n" << sparsemat; return 0; }


Scaricare ppt "BCX (user guide: https://hpc. cineca"

Presentazioni simili


Annunci Google