Странное явление про количество потоков - PullRequest
0 голосов
/ 11 июля 2019

Мой ЦП имеет 2 физических ядра и поддерживает гиперпоточность.Таким образом, я думаю, что я могу управлять 4 потоками.(4 логических ядра) Однако, используя openmp, я могу генерировать гораздо больше ядер.Это странно.

Я новичок в параллельном программировании, и я узнал, что есть несколько способов установить количество потоков, которые я хочу использовать.Я использовал два способа ниже.

  1. omp_set_num_threads (4);
  2. # pragma omp prarallel num_threads (4);
#pragma omp parallel num_threads(100)
{
    printf("%d\n", omp_get_thread_num());
#pragma omp for
    /* code I wanna parallelize */
} 

ЧтоЯ думаю, что странно, логический номер ядра 4 в моем процессоре, но почему omp_get_thread_num() вернул 0 до 99. Я думаю, что это невозможно, в чем смысл 100 в #pragma omp parallel num_threads(100)?

1 Ответ

2 голосов
/ 11 июля 2019

Вы можете иметь больше потоков, чем ваши ядра.Какой поток запускается, к какому ядру ЦП относится ОС (в Windows вы можете установить привязку). ОС будет запускать ваши потоки на основе своего планировщика.

Количество ядер - это количество потоков, которые могут работать одновременно .

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

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