Рейтинг:1

Синхронизация потоков в многопоточных приложениях

флаг er
PBH

я использую СИЕСТА dft в системе CentOS 8 (ядро) с 16-ядерным процессором XEON с 32 потоками и OpenMPI версии 4.1.1 для всех вычислений.

  1. Поскольку у меня 32 потока, я использую 28 из них для выполнения вычислений SIESTA (которые потребляют хороший объем памяти ~ 60%), а оставшиеся 4 оставляю свободными.

  2. Однако, если я начну использовать 2 или 3 оставшихся потока для какого-либо другого приложения (которое имеет незначительное использование памяти), сохраняя при этом вычисление SIESTA на уровне 28 потоков, я вижу, что скорость вычисления SIESTA снижается примерно на 50-60. %.

  3. Я проверил загрузку ЦП и вижу, что один поток остается почти бездействующим при использовании системы в сценарии 2.

Есть ли способ диагностировать и решить эту проблему? Это происходит из-за какой-то ошибки планирования процесса? Можно ли использовать какую-то привязку процесса или пакет планирования заданий для улучшения этого?

Рейтинг:1
флаг cn

Использование ЦП в виде простого % не может передать сложность многоядерного, многопоточного, многопроцессорного ЦП и памяти. Почти наверняка Процессор фактически завис в памяти или кеше. И процессы, у которых есть свои данные, будут бороться за исполнительные блоки.


Этот процессор имеет всего 16 ядер. Как вы обнаружили, обращение с ним так, как будто оно имеет 32, в какой-то момент сильно ухудшит производительность. Даже с SMT 2. Возможно, вы можете получить количество потоков до 125% ядер (20), но 175% (28) подталкивают его. Особенно, когда другие вещи запущены. Вернитесь назад.

Обязательно подсчитайте полезную работу, выполняемую потоком в секунду. Экспериментируйте, изменяя одну переменную за раз. Возможно, попробуйте процессоры с разными конфигурациями кеша и количества ядер, если у вас есть к ним доступ.


Измерьте, насколько вы остановились, с помощью счетчиков мониторинга производительности. Не будет работать в виртуальной машине, но стоит попробовать в Linux. От Грегга, на который я ссылался ранее:

perf stat -a -- сон 10

Теоретическая максимальная скорость на Xeon составляет 4 или 5 инструкций за цикл. Вы этого не получите, но < 1.0 IPC дополнительно зависает в памяти.


Определенно получить представление о коде приложения и горячих точках. Какие функции проводят большую часть времени на процессоре? Какой ассемблерный код пострадал больше всего? Какие исполнительные блоки на вашем процессоре работают больше всего, чтобы обработать эти мопы?

Графики пламени хороши для визуализации функций процессора. Вы упомянули EL 8, который упакованный инструментарий Flamegraph.

yum установить perf js-d3-flame-graph
# общесистемный, 99 Гц, в течение 60 секунд
перфорированный скрипт flamegraph -a -F 99 sleep 60 

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

PBH avatar
флаг er
PBH
Привет, спасибо за ответ. Я проверил, и мой IPC был 0,97, так что кажется, что система застряла на памяти. Однако у меня есть только одна система, поэтому я не могу проверить ее в другом месте. Я проверю изменения IPC, изменив количество используемых ядер, как только текущий текущий расчет завершится (вероятно, это займет больше недели).
PBH avatar
флаг er
PBH
Каково ваше мнение об инструменте «набор задач». Будет ли какая-то разница, если я привяжу расчеты SIESTA к набору ядер, а другую программу к отдельному ядру? Позволит ли это данному ядру работать только с одним типом рабочей нагрузки?

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.