Подтвердить что ты не робот

Как проверить версию OpenMP на Linux

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

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

4b9b3361

Ответ 1

Похоже, что спецификация 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, которую поддерживает реализация.

Ответ 2

Здесь короткая программа С++ 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

Ответ 3

Вы должны проверить свою версию gcc используя

gcc --version

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

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

Ответ 4

Сначала установите переменную окружения OMP_DISPLAY_ENV: в bash:

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 десятичных значений yyyymm, где yyyy и mm обозначают год и месяц версии OpenMP API, которую поддерживает реализация.