Как проверить версию OpenMP на Linux - PullRequest
28 голосов
/ 20 августа 2009

Интересно, как проверить версию OpenMP на удаленной машине с Linux?

Я тоже не знаю, где он установлен.

Ответы [ 4 ]

48 голосов
/ 28 ноября 2012

Похоже, что спецификация C / C ++ для OpenMP не предоставляет прямого способа сделать это программно. Поэтому вы должны проверить документы для вашей версии компилятора.

gcc --version ## get compiler version

Для GCC это хороший ресурс (не упоминаются новейшие версии GCC): http://gcc.gnu.org/wiki/openmp:

Начиная с GCC 4.2, компилятор реализует версию 2.5 стандарта OpenMP, а с 4.4 - версию 3.0 стандарта OpenMP. OpenMP 3.1 поддерживается начиная с GCC 4.7.


Редактировать

Попробовав немного больше, я получил следующее. По крайней мере, он указывает на версию OpenMP - хотя он все еще требует, чтобы вы что-то искали.

$ echo |cpp -fopenmp -dM |grep -i open
#define _OPENMP 200805

Вы можете перейти сюда (http://www.openmp.org/specifications/), чтобы узнать соответствие между предоставленной датой и фактическим номером версии OpenMP.

В реализациях, которые поддерживают препроцессор, имя макроса _OPENMP определено с десятичным значением yyyymm, где yyyy и mm обозначают год и месяц версии OpenMP API, которую поддерживает реализация.

13 голосов
/ 17 декабря 2015

Вот короткая программа на C ++ 11 для отображения вашей версии OpenMP; он также охватывает версию 4.5, выпущенную в ноябре 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;
}

и скомпилируйте его:

g++ -std=c++11 -fopenmp foobar.cpp
4 голосов
/ 27 октября 2017

Вам нужно проверить gcc версию, используя

gcc --version

и затем посмотрите (неполную) таблицу ниже (чья информация взята из этой статьи Wiki и этой веб-страницы с официального сайта 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++     |            |

Там есть пустые записи, потому что я не нашел соответствующей информации.

1 голос
/ 11 декабря 2018

Первая заданная переменная среды OMP_DISPLAY_ENV : в баш:

export  OMP_DISPLAY_ENV="TRUE" 

или в csh-подобной оболочке:

setenv OMP_DISPLAY_ENV TRUE

Затем скомпилируйте и запустите вашу программу OpenMP:

./a.out

Будет дополнительная информация, например:

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

где _OPENMP имеют 8 десятичное значение ггггмм, где гггг и мм - обозначения года и месяца версии API OpenMP, поддерживаемой реализацией.

...