Интересно, как проверить версию OpenMP на удаленной машине Linux?
Я не знаю, где он установлен.
Интересно, как проверить версию OpenMP на удаленной машине Linux?
Я не знаю, где он установлен.
Похоже, что спецификация 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, которую поддерживает реализация.
Здесь короткая программа С++ 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
Вы должны проверить свою версию 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++ | |
Пустые записи есть, потому что я не нашел соответствующей информации.
Сначала установите переменную окружения 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, которую поддерживает реализация.