Как OpenMP omp_set_num_threads () работает с 2 одновременными операциями OMP - PullRequest
0 голосов
/ 11 июля 2019

Как функция omp_set_num_threads() OpenMP влияет на две одновременные операции OpenMP? Количество потоков кумулятивное или жесткое ограничение?

Например, предположим, что два рабочих потока одновременно попадают в следующий блок кода

omp_set_num_threads(4);
#pragma omp parallel for shared(n)  
for (int i=0; i<n; i++) 
{
    // ... some complicated, parallelizable math here...
}

Получит ли каждая операция свои 4 потока (всего 8) или будет разделено 4 потока между двумя одновременными операциями?

(Я предполагаю, что поведение, каким бы оно ни было, было бы идентичным, если бы я использовал переменную среды OMP_NUM_THREADS или предложение num_threads. Если я ошибся, скажите, пожалуйста ...)

Я спрашиваю, потому что у меня есть клиент, использующий мой SDK на машине с целыми лот-ядрами. Ему нужно сделать много вызовов одной из моих функций SDK, которая реализована с помощью OpenMP. (Я не написал это. Я унаследовал это). Он хотел поэкспериментировать с распараллеливанием своих вызовов этой функции в поисках более быстрой общей пропускной способности. И у него уже есть возможность контролировать аргумент, который мой код использует для omp_set_num_threads().

Я понял, что недостаточно осведомлен, чтобы посоветовать ему, какое значение номера потока использовать или даже если параллелизация (поверх реализации OpenMP) - это стоящий путь для изучения. Поэтому я хотел бы хотя бы понять, что OpenMP должен делать в этом случае, прежде чем начинать свои собственные тесты.

Если это имеет значение, я использую Open MP в Visual Studio 2017, так что я предполагаю только реализацию 2.0

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