C++ и API OpenMP переменная среды

171
17 декабря 2018, 02:50

начал изучать параллельное программирование, подключил API OpenMP в проект C++. Добавлением кода

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -fopenmp")

в файл CMakeLists.txt Далее пытался изменить значение переменной OMP_NUM_THREADS через export, а именно

#include <iostream>
#include <omp.h>
export OMP_NUM_THREADS = 15; 
int main() {
    #pragma omp parallel
    printf("Hello World!\n");
    return 0;
}

Но программа выдаёт ошибку, не могли бы вы подсказать с чем это связано? Знаю, что можно ещё 2-мя другими способами, через опцию num_threads и функцию omp_set_num_threads, но необходимо сделать именно так. Ошибку выкидывает следующую:

[ 50%] Building CXX object CMakeFiles/Lab1.dir/main.cpp.obj
C:\Users\Home\Desktop\ParallelProgramming\Lab1\Lab1\main.cpp:3:1: warning: keyword 'export' not implemented, and will be ignored
 export OMP_NUM_THREADS = 15;
 ^~~~~~
C:\Users\Home\Desktop\ParallelProgramming\Lab1\Lab1\main.cpp:3:8: error: 'OMP_NUM_THREADS' does not name a type
 export OMP_NUM_THREADS = 15;
        ^~~~~~~~~~~~~~~

Среда для разработки используется следующая JetBrains CLion 2018.2.3

Answer 1

В зависимости от операционной системы, Вы можете использовать либо системный вызов putenv() для POSIX (юниксоподобных) систем с устаревшими системами/компиляторами, либо setenv() с более новыми, либо _putenv(), _wputenv() (или безопасные аналоги последних: _putenv_s(), _wputenv_s()) для MS Windows.

Но скорее всего, в задании подразумевалось установить переменную окружения до старта Вашей программы. Например, если Вы работаете в bash под Linux, то можно для запуска программы в шелл сначала выполнить команду export OMP_NUM_THREADS=15, а уже после этого запускать саму программу. Ну, или можно сделать скрипт из пары этих строк.

READ ALSO
Работа с указателями в C++

Работа с указателями в C++

Допустим, я объявляю переменную

156
Не работает SocketIO в проекте cocos2d

Не работает SocketIO в проекте cocos2d

Я создал локальный сервер на node js, к которому должны подключаться клиенты и сохраняться в массиве:

192
Как установить скроллинг для виджета

Как установить скроллинг для виджета

Делаю виджет — диаграмму времени, которая будет отображать посчитанные моменты времени для разных групп объектов:

189