Максимальное количество потоков на 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 шт):

Автор решения: Vladimir

Вы используете директиву 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() и из-за этого Вы не получили соответствующее число.

→ Ссылка