У меня есть функция, которая выглядит примерно так:
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 нет функции, которая может подсказать счетчик потоков по умолчанию.
Существуют ли какие-либо средства, с помощью которых я могу заменить уродливый расточительный взлом в верхней части функции каким-либо вызовом окружения или функции, который я пропустил?