Максимальное количество потоков на C++ OpenMP всегда равно 1
Поставили задачу написать пару алгоритмов на C++ с использованием OpenMP. Так как у меня Macbook, то пришлось установить IDE Clion и работать с ним.
Код main.cpp:
#include <iostream>
#include "/usr/local/opt/libomp/include/omp.h"
#define THREAD_NUM 4
int main()
{
omp_set_num_threads(THREAD_NUM);
std::cout << omp_get_thread_limit << std::endl;
#pragma omp parallel for num_threads(4)
{
std::cout << "Number of available threads: " << omp_get_num_threads() << std::endl;
std::cout << "Current thread number: " << omp_get_thread_num() << std::endl;
std::cout << "Hello, World!" << std::endl;
}
return 0;
}
Код CMakeLists.txt:
cmake_minimum_required(VERSION 3.14)
project(OpenMPTest)
set(CMAKE_CXX_STANDARD 17)
add_executable(OpenMPTest main.cpp)
find_package(OpenMP REQUIRED)
target_link_libraries(${PROJECT_NAME} ${OpenMP_CXX_LIBRARIES})
При компиляции выдает всегда следующее:
1
Number of available threads: 1
Current thread number: 0
Hello, World!
Не могу понять причину, по которой кол-во потоков не увеличивается в соответствии со значением, которое я пытаюсь ему задать. Сразу скажу, что до этого не работал ни с C++, ни с OpenMP.
ОС: MacOS Catalina Версия Бета 10.15.6 (19G36e)
Ответы (1 шт):
Вы используете директиву omp parallel for, но у Вас нет там цикла for. Что Вы ожидаете так получить? Уберите отсюда слово for и будет Вам счастье.
#include <iostream>
#include "/usr/local/opt/libomp/include/omp.h"
// #include <omp.h>
#define THREAD_NUM 4
int main()
{
omp_set_num_threads(THREAD_NUM);
std::cout << omp_get_thread_limit() << std::endl;
#pragma omp parallel num_threads(4)
{
std::cout << "Number of available threads: " << omp_get_num_threads() << std::endl;
std::cout << "Current thread number: " << omp_get_thread_num() << std::endl;
std::cout << "Hello, World!" << std::endl;
}
return 0;
}
Пример собирался с помощью mingw-w64 под Win10; командная строка: g++ test2.cpp -o test2 -O2 -fopenmp
PS: еще, Вы не написали скобки у функции omp_get_thread_limit() и из-за этого Вы не получили соответствующее число.
