Как вы контролируете схожесть потоков между несколькими процессами в Linux?

702
Derek Rodriguez

Вопрос

Как мне запустить два теста так, чтобы:

  • Они оба исполняются одновременно
  • Оба теста имеют половину своих потоков на каждом сокете.
  • Нет двух потоков с одним и тем же ядром.

Фон

У меня есть две программы: бенчмарк, написанный на Fortran, и бенчмарк, написанный на C. Они оба реализуют библиотеку OpenMP и настроены на.

В настоящее время я пытаюсь распределить потоки обоих процессов по нескольким сокетам, не позволяя двум потокам совместно использовать одно и то же ядро. OpenMP позволяет равномерно распределять потоки по нескольким сокетам с помощью OMP_PROC_BIND=spreadпеременной среды. Однако при одновременном выполнении обеих программ я получаю оба теста, использующих одни и те же ядра.

Я запускаю эти тесты на сервере с двумя 12-ядерными процессорами Haswell-E, и у меня установлены тесты для создания 12 потоков в одной части, так что нет недостатка в ядрах. В настоящее время я использую CentOS 7.3.1611.

Примечание

Я знаю, что это странная конфигурация, однако она необходима для анализа производительности. Большое спасибо заранее всем, кто внес свой вклад в эту тему.

0

1 ответ на вопрос

0
Astara

Во-первых: получите макет вашего процессора из / proc / cpuinfo, который будет выглядеть примерно так (это на 2-сокетном, 6-ядерном, урезанный список):

> cat /proc/cpuinfo |grep -P 'processor|physical id|core id' processor : 0 physical id : 1 core id : 0 processor : 1 physical id : 0 core id : 0 processor : 2 physical id : 1 core id : 1 processor : 3 physical id : 0 core id : 1 

физический идентификатор будет вашим сокетом, обратите внимание, в моем случае переключение основного идентификатора между сокетами.

используйте 'schedtool', чтобы установить сродство 1 группы ко всем физическим идентификаторам. Так что в моем случае, так как четы и шансы находятся на отдельных физических процессорах (сокетах), я бы использовал:

schedtool -a 0,2,4,6,8,10 -e run_group1 & schedtool -a 1,3,5,7,9,11 -e run_group2 & 

где run_group1 запускает все ваши потоки на одном ядре, а run_group2 запускает остальные. (посмотрите на 'man schedtool' (в разделе 8, чтобы узнать больше вариантов. Я поместил их оба в фоновый режим, чтобы обе группы работали одновременно).

Возможно, вам нужно быть пользователем root, чтобы установить сходство - не уверен.

Это решает ваш вопрос или я что-то не так понял?

Я ценю это предложение! Я попробую это завтра. По какой-то причине RPM не смог найти schedtools в базе данных, но это, вероятно, проблема, которая была решена в другом посте. Derek Rodriguez 6 лет назад 0
Работало отлично! Большое спасибо. Derek Rodriguez 6 лет назад 0

Похожие вопросы