[C++] Librerie di algebra lineare & HPC

Messaggioda feddy » 27/06/2020, 15:38

Ciao a tutti,

spero sia la sezione giusta.
Per la mia tesi magistrale (analisi numerica) mi sto ritrovando ad utilizzare in modo intensivo C++ (con openMP per parallelizzare su CPUs), in particolare ho a che fare con matrici sparse. Come libreria di algebra lineare sto usando Eigen, ma so che in rete ce ne sono altre di popolari come PETSc e Armadillo che non ho mai usato personalmente.

Volevo chiedere, per chi ha avuto la possibilità oppure è del settore, quale preferite/consigliate/usate e chiaramente perché.
Avatar utente
feddy
Moderatore
Moderatore
 
Messaggio: 2703 di 5934
Iscritto il: 26/06/2016, 00:25
Località: SISSA

Re: [C++] Librerie di algebra lineare & HPC

Messaggioda vict85 » 29/06/2020, 08:55

Non ho molta esperienza con le matrici sparse, e di quelle librarie conosco solo Eigen (ma sono anni che non ho a che fare con BLAS). Da quel che ho capito, internamente funzionano in modo simile e personalmente immagino che abbiano performance similari.
Se già conosci la sintassi di Eigen è probabilmente più conveniente continuare ad usarlo. Ma immagino che dipenda da quale sia quella più usata nel tuo specifico settore. Le altre due librerie mi sembra che siano qualcosa di più di librerie di algebra lineare.
vict85
Moderatore
Moderatore
 
Messaggio: 10144 di 19253
Iscritto il: 16/01/2008, 00:13
Località: Berlin

Re: [C++] Librerie di algebra lineare & HPC

Messaggioda Raptorista » 29/06/2020, 09:19

Io ho un po' di esperienza con queste librerie.
Eigen è una libreria con un bel design, ma non molto facile da usare, almeno all'inizio. Costrutti apparentemente innocui possono generare errori molto criptici. Eigen non supporta il calcolo parallelo a memoria distribuita [MPI], quindi sarà sempre limitato ad un solo nodo.
PETSc è una libreria ad oggetti scritta in C ma si può usare anche da C++ e da Python. È molto conosciuta, ha generalmente buone prestazioni ed un'interfaccia decisamente più user-friendly di Eigen. È una libreria per simulazioni giganti e supporta solo MPI, non OpenMP. Chiaramente la puoi usare anche su un solo nodo con più processi.
Trilinos è il rivale più noto di PETSc. Trilinos è scritto in C++ ed è una libreria molto più grande di PETSc per quanto riguarda il range di utilizzo, infatti contiene sia moduli di algebra lineare sia moduli di ottimizzazione, partizionamento di grafi e tante altre cose. A giudicare dalla documentazione, direi che Trilinos supporta sia OpenMP sia MPI, ma non l'ho mai usata personalmente.

PETSc e Trilinos sono i due giganti del settore, quindi magari vale la pena esplorare una di queste due.
Un matematico ha scritto:... come mia nonna che vuole da anni il sistema per vincere al lotto e crede che io, in quanto matematico, sia fallito perché non glielo trovo


Immagine
Avatar utente
Raptorista
Moderatore
Moderatore
 
Messaggio: 5429 di 9616
Iscritto il: 28/09/2008, 19:58

Re: [C++] Librerie di algebra lineare & HPC

Messaggioda feddy » 29/06/2020, 12:05

Grazie ad entrambi per le risposte :-)

@vict Sì ho molta familiarità con Eigen, anche perché come prima librerai di algebra lineare mi sembrava quella più user-friendly.

@Raptorista Cavolo, non sapevo che Eigen non supportasse MPI/OpenMP. Questo è un problema. Credo che opterò per PETSc, nonostante supporti solo MPI. Anche perché mi pare di vedere (leggendo su scicomp) che per quanto riguarda sistemi lineari sparsi ecc. sia molto usata da gente del settore. Se posso chiedere, hai avuto problemi nell'utilizzare MPI con PETSc?
Avatar utente
feddy
Moderatore
Moderatore
 
Messaggio: 2704 di 5934
Iscritto il: 26/06/2016, 00:25
Località: SISSA

Re: [C++] Librerie di algebra lineare & HPC

Messaggioda Raptorista » 29/06/2020, 15:15

feddy ha scritto:@Raptorista Cavolo, non sapevo che Eigen non supportasse MPI/OpenMP. Questo è un problema.

Supporta solo OpenMP.
feddy ha scritto:Credo che opterò per PETSc, nonostante supporti solo MPI.

È una buona scelta. Su un solo nodo non noterai la differenza comunque.
feddy ha scritto:Anche perché mi pare di vedere (leggendo su scicomp) che per quanto riguarda sistemi lineari sparsi ecc. sia molto usata da gente del settore.

Né più né meno di Trilinos.
feddy ha scritto:Se posso chiedere, hai avuto problemi nell'utilizzare MPI con PETSc?

Non propriamente problemi, però in certi casi devi fare attenzione a rendere i vettori compatibili con le matrici che vuoi usare, avere il giusto sparsity pattern, cose così. È una libreria in C, quindi molte cose vanno fatte a mano.
Un matematico ha scritto:... come mia nonna che vuole da anni il sistema per vincere al lotto e crede che io, in quanto matematico, sia fallito perché non glielo trovo


Immagine
Avatar utente
Raptorista
Moderatore
Moderatore
 
Messaggio: 5430 di 9616
Iscritto il: 28/09/2008, 19:58

Re: [C++] Librerie di algebra lineare & HPC

Messaggioda feddy » 30/06/2020, 15:40

Raptorista ha scritto:Supporta solo OpenMP.

Ok, a questo punto provo ad iniziare con Eigen giusto per scrupolo (ho molta più familiarità con openMP), ma ho deciso che utilizzerò PETSc alla fine.

Raptorista ha scritto:È una buona scelta. Su un solo nodo non noterai la differenza comunque.


Certamente, il fatto è che posso utilizzare il cluster di ateneo, mi ero dimenticato di dirlo in effetti :-)


Un'ultima cosa: su MPI ho veramente poca esperienza, conosci per caso qualche buon testo "introduttivo" sul suo utilizzo (con c++) ?
Avatar utente
feddy
Moderatore
Moderatore
 
Messaggio: 2705 di 5934
Iscritto il: 26/06/2016, 00:25
Località: SISSA

Re: [C++] Librerie di algebra lineare & HPC

Messaggioda Raptorista » 30/06/2020, 15:57

feddy ha scritto:Un'ultima cosa: su MPI ho veramente poca esperienza, conosci per caso qualche buon testo "introduttivo" sul suo utilizzo (con c++) ?

A suo tempo ho usato "Pacheco - Parallel programming with MPI". È un po' datato ma dovrebbe essere ancora utile. Le implementazioni più comuni di MPI sono in C, non in C++, ma si possono usare da codice C++.
Un matematico ha scritto:... come mia nonna che vuole da anni il sistema per vincere al lotto e crede che io, in quanto matematico, sia fallito perché non glielo trovo


Immagine
Avatar utente
Raptorista
Moderatore
Moderatore
 
Messaggio: 5432 di 9616
Iscritto il: 28/09/2008, 19:58

Re: [C++] Librerie di algebra lineare & HPC

Messaggioda vict85 » 01/07/2020, 10:50

Avrai effettivamente a che fare con più processori? Insomma su che sistema intendi usarlo?
vict85
Moderatore
Moderatore
 
Messaggio: 10145 di 19253
Iscritto il: 16/01/2008, 00:13
Località: Berlin

Re: [C++] Librerie di algebra lineare & HPC

Messaggioda feddy » 01/07/2020, 11:03

Grazie Raptorista :)

@vict Sì ho a che fare con un Beowulf cluster
Avatar utente
feddy
Moderatore
Moderatore
 
Messaggio: 2706 di 5934
Iscritto il: 26/06/2016, 00:25
Località: SISSA

Re: [C++] Librerie di algebra lineare & HPC

Messaggioda vict85 » 01/07/2020, 11:17

Ok, quindi devi usare MPI. D'altra parte non è strettamente necessario che la tua libraria supporti internamente MPI. Insomma puoi dividere il problema tra i nodi manualmente e poi chiamare le funzioni di algebra lineare internamente ai nodi. Se invece la libreria lo usa internamente potrebbe non essere strettamente necessario che tu sappia usare bene MPI. Dovresti cominciare con i tutorial di PETSc secondo me.
vict85
Moderatore
Moderatore
 
Messaggio: 10146 di 19253
Iscritto il: 16/01/2008, 00:13
Località: Berlin

Prossimo

Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite