Как Debian использует большое количество ядер ЦП?

Как Debian использует большое количество ядер ЦП?

Я только что получил аккаунт на 24-ядерном VPS (согласно UnixBench, там 24 процессора).

  1. В общих чертах, как можно эффективно использовать все эти ядра для общих вычислений оболочки в Debian?
  2. Нужно ли мне вводить что-то специальное при запуске долго работающих приложений из оболочки, чтобы каждый процесс запускался на отдельном ядре, если оно доступно? Или Debian просто обрабатывает все это, невидимо для меня?

решение1

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

Однако нет смысла иметь 24 ЦП, если у вас нет по крайней мере 24 параллельных потоков для запуска. Программы не будут волшебным образом работать быстрее, если будет доступно больше ЦП: только программы, которые закодированы для нескольких параллельных потоков, получат выгоду, а многие программы не получат выгоды, не потому что они написаны худшим образом, а потому что то, что они делают, по своей сути не поддается распараллеливанию.

Программа с N параллельными потоками вычислений выиграет от использования до N ЦП (хотя она может и не работать в N раз быстрее, поскольку синхронизация между потоками занимает время). Запуск M различных программ, которые не взаимодействуют друг с другом слишком много или вообще не взаимодействуют, также использует преимущества M ЦП (или даже больше, если программы многопоточные).

Есть несколько случаев, когда необходимо ручное вмешательство, чтобы воспользоваться преимуществами параллелизма. Если вы запускаете несколько задач обработки данных, позаботьтесь о том, чтобы они запускались параллельно (немного больше одной задачи на ЦП), а не одна за другой. Например, при сборке программного обеспечения передайте параметр -j. makeПосмотрите еще несколько примеров и пояснений:

Если вы используете веб-сервер, все веб-серверы, рассчитанные на большие нагрузки, хорошо используют параллелизм. Apache используется в качестве тестового случая при оценке производительности оптимизаций в ядре Linux. Однако имейте в виду, что параллелизм в ЦП помогает только в том случае, если нет других узких мест, таких как конфликт из-за доступа к базе данных или пропускной способности ввода-вывода.

решение2

Использование многих ядер для ускорения производительности во многом зависит от вашего приложения. Некоторые приложения необходимо запускать пошагово: просто нет возможности разделить вычисления параллельно между многими ядрами, поскольку для вычисления определенного шага нужно знать результаты предыдущих шагов. Если это так, то использование 24 ядер так же хорошо, как и использование только одного.

В других случаях, когда приложению необходимо выполнять множество действий, не зависящих друг от друга, наличие большого количества ядер может значительно ускорить работу. В качестве подходящего примера, если вы компилируете проект со многими исходными файлами, вы можете скомпилировать каждый исходный файл независимо, прежде чем связывать разные файлы. В таком случае вы можете заставить компилятор скомпилировать каждый файл на отдельном ядре. Приложения, которые могут использовать несколько ядер ЦП, обычно имеют переключатель, чтобы вы могли запросить это. Например, при компиляции проекта с использованием GNU makeвы можете передать ему переключатель, -jза которым следует число. Это число указывает количество заданий, makeкоторые должны запускаться одновременно (читай: на разных ядрах).

Связанный контент