Pagina 1 di 1

Supporto alla compilazione parallela: è predefinito in Slackware?

Inviato: sab 13 mag 2023, 20:02
da gian_d
Sto testando uno slackbuild (saga-gis) attivando o meno il supporto a dipendenze opzionali. Fra queste c'è OpenMP. In genere non mi sono mai posto il problema perché nel mio sistema è installato OpenMPI (da slackbuilds.org) e ho sempre pensato che fosse l'unico pacchetto a fornire questo supporto.

Ma così non è. L'ho disinstallato per fare una prova ma la compilazione di Saga-gis parte ugualmente con il supporto alla parallelizzazione. Il modulo findpackage di cmake, infatti, restituisce questo risultato:

Codice: Seleziona tutto

-- Found OpenMP_C: -fopenmp (found version "4.5") 
-- Found OpenMP_CXX: -fopenmp (found version "4.5") 
-- Found OpenMP: TRUE (found version "4.5")  
A questo punto mi sorge un dubbio e qui mi perdo. Questo supporto è dato da un pacchetto ufficiale della Slackware oppure da software di terze parti?
Cercando in rete mi viene il sospetto che l'attivazione del flag possa essere una funzionalità fornita da llvm (rilasciato nella Slackware ufficiale) oppure dal driver proprietario di Nvidia (CUDA non è installato). A questo punto potrei fare delle prove disinstallando a turno questi pacchetti, magari con il risultato di perdermi perché alla fine procederei alla cieca per tentativi.

Qualcuno ne sa qualcosa? Alla fine mi chiedo se effettivamente serva tenere installato OpenMPI visto che in SlackBuilds.org è in genere indicato come pacchetto necessario per il software che richiede il supporto a OpenMP. Preciso che OpenMPI è l'unico pacchetto che ho installato fra quelli disponibili su SBo.

Naturalmente la via più logica sarebbe quella di fare una verifica in un sistema pulito, ma la cosa si complicherebbe per me perché quelli che ho in macchina virtuale hanno già software di terze parti installato.

Re: Supporto alla compilazione parallela: è predefinito in Slackware?

Inviato: sab 13 mag 2023, 21:03
da erio
in slackware current /d c'e' parallel ma non so se parte in automatico o lo devi inpostare.

Re: Supporto alla compilazione parallela: è predefinito in Slackware?

Inviato: sab 13 mag 2023, 21:44
da gian_d
Sì, parallel è la prima cosa a cui ho pensato dal momento che è installato nel mio sistema, ma non sono in grado di verificare se il flag è fornito da questo pacchetto. In sostanza lo script findpackage di cmake verifica se funziona il flag -fopenmp ma poi non si capisce (almeno io) l'origine di questo flag. A meno che, ripeto, non provi per tentativi disinstallando i pacchetti presunti.

Ma sinceramente non so se il gioco vale la candela. Ho preso in carico questo slackbuild perché è orfano, ho già adattato lo script all'ultima versione e con la mia configurazione funziona, volevo però verificare se i vari script findpackage di cmake nei sorgenti di questo pacchetto funzionano per intercettare eventuali errori contestuali a specifiche configurazioni.

Ad esempio, questo software supporta la libreria qhull, ma anche se è installata cmake non la rileva, non so se per un difetto della configurazione di installazione di qhull o per un difetto nei sorgenti di saga-gis. Individuare in anticipo questi inconvenienti è utile in modo che si possano segnalare in README.

Re: Supporto alla compilazione parallela: è predefinito in Slackware?

Inviato: sab 13 mag 2023, 21:48
da gian_d
PS: in ogni modo parallel è già rilasciato anche nella Slackware 15 stable, non solo nella current.

Re: Supporto alla compilazione parallela: è predefinito in Slackware?

Inviato: mar 16 mag 2023, 11:03
da ponce
prova a dare un'occhiata al contenuto dei file risultanti da questa ricerca

Codice: Seleziona tutto

grep -i openmp /var/log/packages/* | grep -i cmake$
entrambi i file (piu' un terzo se hai multilib) fanno riferimento al supporto di OpenMP da parte del compilatore ma e' qualcosa che viene usato dal codice compilato a runtime per una esecuzione piu' efficace, non e' usato per accelerare la fase di compilazione.
il supporto ad openmp da parte del compilatore si riferisce alla possibilita' di parallelizzare alcune chiamate tramite una API, ma dipende tutto da come e' scritto il software che stai compilando: sono disponibili delle specifiche da seguire https://www.openmp.org/specifications/

openmpi invece e' richiesto (come dipendenza obbligatoria o opzionale) da alcuni software che sono su SBo: nel caso tu lo rimuova e' probabile che smettano di funzionare (a meno che non aggiungano libmpi al loro interno staticamente).

Re: Supporto alla compilazione parallela: è predefinito in Slackware?

Inviato: mar 16 mag 2023, 18:12
da gian_d
Grazie Ponce, ora è più chiaro: l'incriminato è proprio llvm!

Codice: Seleziona tutto

/var/log/packages/cmake-3.26.3-x86_64-1:usr/share/cmake-3.26/Modules/FindOpenMP.cmake
/var/log/packages/llvm-16.0.3-x86_64-1:usr/lib64/cmake/openmp/FindOpenMPTarget.cmake
In ogni modo la rimozione era temporanea: openmpi l'ho installato come dipendenza obbligatoria di tauDEM (un applicativo Gis) e, visto che ce l'ho nel sistema, come dipendenza opzionale di VTK. Quando faccio queste disinstallazioni lo faccio solo temporaneamente per testare uno slackbuild in differenti contesti. Infatti conservo sempre una copia dei pacchetti compilati per non dover ripetere la compilazione quando voglio rimuovere temporaneamente un pacchetto.

Sul fatto che una dipendenza sia obbligatoria in runtime o in compilazione è un altro paio di maniche. Nel dubbio io lascio installate tutte le dipendenze anche quelle che in runtime non sarebbero necessarie

Re: Supporto alla compilazione parallela: è predefinito in Slackware?

Inviato: lun 17 lug 2023, 18:42
da 414N
In realtà gcc ne contiene una sua implementazione (la libgomp) e forse viene rilevata anch'essa dal modulo FindOpenMP di cmake.

Re: Supporto alla compilazione parallela: è predefinito in Slackware?

Inviato: lun 17 lug 2023, 19:00
da gian_d
può darsi, per appurarlo forse bisognerebbe riguardarsi il codice sorgente del modulo, ma non mi sembra il caso, si trattava di una semplice curiosità

Re: Supporto alla compilazione parallela: è predefinito in Slackware?

Inviato: lun 17 lug 2023, 19:15
da 414N
Non importa, basta un semplice programma di test in C con OpenMP:

Codice: Seleziona tutto

#include <stdio.h>
#include "omp.h"
int main()
{
#pragma omp parallel
	{
		printf ("hello from thread %d\n", omp_get_thread_num());
	}
	return 0;
}
Compilandolo con

Codice: Seleziona tutto

gcc -fopenmp -o test_omp test_omp.c
ottengo:

Codice: Seleziona tutto

hello from thread 3
hello from thread 0
hello from thread 7
hello from thread 6
hello from thread 2
hello from thread 1
hello from thread 5
hello from thread 4