Как определить количество потоков по умолчанию, которое OpenMP использует для параллельного раздела? - PullRequest
2 голосов
/ 28 апреля 2020

У меня есть функция, которая выглядит примерно так:

void doParallelWork(std::vector<WorkItem> &workItems, unsigned int threadCount = 0) {
    // Use OpenMP default thread count if threadCount not set
    if(threadCount == 0) {
        #pragma omp parallel
        {
            threadCount = omp_get_num_threads();
        };
    }

    #pragma omp parallel for num_threads(threadCount)
    for(int i = 0; i < workItems.size(); i++) {
        doWork(workItems.at(i));
    }
}

Я бы хотел, чтобы функция использовала счетчик потоков OpenMP по умолчанию, если threadCount не указан (фактически пропуская параметр num_threads), и используйте значение переопределения, если оно есть. Тем не менее, счетчик потоков по умолчанию, похоже, определяется реализацией, и, насколько я могу судить, в OpenMP нет функции, которая может подсказать счетчик потоков по умолчанию.

Существуют ли какие-либо средства, с помощью которых я могу заменить уродливый расточительный взлом в верхней части функции каким-либо вызовом окружения или функции, который я пропустил?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...