Je me demande comment vérifier la version d'OpenMP sur une machine distante Linux?
Je ne sais pas non plus où il est installé.
Il semble que la spécification C/C++ pour OpenMP ne fournisse aucun moyen direct de procéder par programme. Vous devez donc vérifier la documentation de votre version du compilateur.
gcc --version ## get compiler version
Pour GCC, il s’agit d’une bonne ressource (ne mentionne pas les versions les plus récentes de GCC): http://gcc.gnu.org/wiki/openmp :
À partir de GCC 4.2, le compilateur implémente la version 2.5 du standard OpenMP et à partir de 4.4, il implémente la version 3.0 du standard OpenMP. OpenMP 3.1 est supporté depuis GCC 4.7.
Après avoir essayé un peu plus fort, j'ai eu ce qui suit au travail. Cela donne au moins une indication de la version d'OpenMP - bien qu'il vous oblige toujours à chercher quelque chose.
$ echo |cpp -fopenmp -dM |grep -i open
#define _OPENMP 200805
Vous pouvez aller ici ( http://www.openmp.org/specifications/ ) pour découvrir le mappage entre la date fournie et le numéro de version actuel d’OpenMP.
Dans les implémentations prenant en charge un préprocesseur, le nom de la macro _OPENMP est défini avec la valeur décimale yyyymm, où yyyy et mm sont les désignations d'année et de mois de la version de l'API OpenMP prise en charge par l'implémentation.
Voici un court programme C++ 11 pour afficher votre version OpenMP; il couvre également la version 4.5 publiée en novembre 2015.
#include <unordered_map>
#include <cstdio>
#include <omp.h>
int main(int argc, char *argv[])
{
std::unordered_map<unsigned,std::string> map{
{200505,"2.5"},{200805,"3.0"},{201107,"3.1"},{201307,"4.0"},{201511,"4.5"}};
printf("We have OpenMP %s.\n", map.at(_OPENMP).c_str());
return 0;
}
et le compiler avec:
g++ -std=c++11 -fopenmp foobar.cpp
Vous devez vérifier votre version gcc
en utilisant
gcc --version
et ensuite voir le tableau (incomplet) ci-dessous (dont les informations proviennent de cet article Wiki et de cette page Web du site officiel OpenMP):
| gcc version | OpenMP version | Languages | Offloading |
|-------------|----------------|-----------------|------------|
| 4.2.0 | 2.5 | C | |
| 4.4.0 | 3.0 | C | |
| 4.7.0 | 3.1 | C | |
| 4.9.0 | 4.0 | C, C++ | |
| 4.9.1 | 4.0 | C, C++, Fortran | |
| 5 | | | Yes |
| 6.1 | 4.5 | C, C++ | |
Les entrées vides sont là car je n’ai pas trouvé l’information correspondante.
Définissez d'abord la variable d'environnement - OMP_DISPLAY_ENV : In bash:
export OMP_DISPLAY_ENV="TRUE"
ou dans Shell comme csh:
setenv OMP_DISPLAY_ENV TRUE
Ensuite, compilez et exécutez votre programme OpenMP:
./a.out
Il y aura des informations supplémentaires, comme:
OPENMP DISPLAY ENVIRONMENT BEGIN
_OPENMP = '201511'
OMP_DYNAMIC = 'FALSE'
OMP_NESTED = 'FALSE'
OMP_NUM_THREADS = '8'
OMP_SCHEDULE = 'DYNAMIC'
OMP_PROC_BIND = 'FALSE'
OMP_PLACES = ''
OMP_STACKSIZE = '0'
OMP_WAIT_POLICY = 'PASSIVE'
OMP_THREAD_LIMIT = '4294967295'
OMP_MAX_ACTIVE_LEVELS = '2147483647'
OMP_CANCELLATION = 'FALSE'
OMP_DEFAULT_DEVICE = '0'
OMP_MAX_TASK_PRIORITY = '0'
OPENMP DISPLAY ENVIRONMENT END
où _OPENMP a la valeur décimale 8 yyyymm où yyyy et mm sont les désignations de l'année et du mois de la version de l'API OpenMP prise en charge par l'implémentation.