2015-10-27 4 views
2

В conda,mkl_set_num_threads() ограничено физическими ядрами?

В одном компьютере у меня процессора i7 4790 который 4 ядра 8 потоков. Когда я использую mkl.set_num_threads(n), где n > 4, он установлен на 4, когда я проверю его позже от mkl.get_max_threads(). Это имеет смысл, поскольку mkl не использует Hyper Thread.

В другом компьютере у меня E5 2643 который также 4 ядра 8 потоков. Однако на этот раз можно установить количество потоков в 8. Почему?

В обоих машинах, если я mkl.set_num_threads(2), mkl.get_max_threads() возвращает 2, как ожидалось.

ответ

2

Прямо из:https://software.intel.com/en-us/node/522117

int mkl_get_max_threads (void); 

Эта функция возвращает количество OpenMP нитей для Intel MKL для использования во внутренних параллельных регионах. Это число зависит от того, отключена ли динамическая настройка количества потоков Intel MKL (по настройке среды или при вызове функции):

Если динамическая настройка отключена, функция проверяет настройки среды и возвращает значения функция вызывает ниже в порядке их перечисления, пока он не найдет ненулевое значение:

  1. вызов mkl_set_num_threads_local
  2. последний из звонков mkl_set_num_threads или mkl_domain_set_num_threads (..., MKL_DOMAIN_ALL)
  3. Переменная среды MKL_DOMAIN_NUM_THREADS с MKL_DOMAIN_ALL тегом
  4. переменной MKL_NUM_THREADS среды
  5. ПРИЗЫВОМ К omp_set_num_threads
  6. В OMP_NUM_THREADS переменной окружении

Если динамическая настройка включена, то функция возвращает количество физических ядер в системе , Число потоков, возвращаемых этой функцией, является подсказкой, и Intel MKL может фактически использовать другое число.

+0

Вы подразумеваете, что у меня включена динамическая регулировка на i7, но не на E5? Но почему я могу установить, чтобы потоки были меньше числа физических ядер в этом случае? – colinfang

+0

@colinfang Да, я имею в виду это. Вы всегда можете установить, чтобы потоки были меньше числа физических ядер, что делает его больше, чем число физических ядер, похоже, не работает. – CrakC