web-dev-qa-db-fra.com

Comment vérifier la version d'OpenMP sur Linux

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é.

27
Tim

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.


Modifier

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.

46
nobar

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
11
user2023370

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.

3
nbro

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.

1
Adam