У меня есть библиотека классов C ++, которая использует omp для распараллеливания.Я заметил мою проблему, когда он всегда использовал все ядра на моем процессоре, независимо от того, что omp_set_num_threads (threadCount) имел в качестве входных данных.
Поэтому, исследуя, я понял, что единственный способ заставить работать num_threads - это не использовать метод omp_set_num_threads (), а установить num_threads в параллельной директиве следующим образом:в вышеприведенном случае вывод:
Hello from thread 0
Hello from thread 0
Hello from thread 0
Hello from thread 0
Если я вместо этого использую следующее:
omp_set_num_threads(4);
#pragma omp parallel //num_threads(4)
{
int i = omp_get_thread_num();
printf_s("Hello from thread %d\n", i);
}
Вывод
Hello from thread 0
Hello from thread 0
Hello from thread 0
Hello from thread 0
Hello from thread 0
Hello from thread 0
Hello from thread 0
Hello from thread 0
Однако я создал новыйПроект консольного приложения типа Win32 omp_set_num_threads работает, и я получаю вывод:
Привет из потока 0 Привет из потока 2 Привет из потока 1 Привет из потока 3
Я должен думать, что это имеетделать с типом проекта или каким-либо параметром проекта.Кто-нибудь знает, что это может быть?
С наилучшими пожеланиями Ричард