Чтобы обеспечить полезную структуру, я хотел бы рассмотреть эту иерархию:
- материнская плата может содержать одну или несколько фишек / кубиков;
- чип / кристалл может содержать одно или несколько ядер (независимых процессоров);
- ЦП может обрабатывать один или несколько потоков одновременно (известная мне многопоточность состоит из двух потоков)
В первые дни у вас чаще всего была одна материнская плата с одним чипом и одним процессором с одним потоком. Только один процесс может быть обработан за один раз, и набор аппаратного обеспечения был обозначен как процессор . Было однозначное сопоставление между частями программного обеспечения (задача для запуска) и частями оборудования (устройство для запуска задачи).
Процесс - это определенно программное обеспечение . «Поток» - это, проще говоря, спецификация «процесса» в контексте параллельных параллельных вычислений. В настоящее время процессор может относиться как к физическому устройству, так и к его расширенным возможностям обработки (опять же, многопоточность, что, безусловно, является технологической реализацией). Например, вы можете иметь машины с двумя чипами на материнской плате, с четырьмя ядрами / процессорами на чип и с каждым ядром / процессорами, работающими по два потока одновременно. Тогда вы сможете запускать процессы 2x4x2 = 16 (конечно, без переподписки ресурсов).
Синтаксис MPI, который вы цитируете, адресов процессов (опция np
) или потоков, если хотите. Часть описания man mpirun
даже ссылается на процессы как на «слоты» (например, см. Спецификации для файла хоста).
Слоты показывают, сколько процессов потенциально могут выполняться на узле.
Такое использование звучит как наследие той тесной взаимосвязи между единицами аппаратного обеспечения и единицами программного обеспечения, которая была тогда стандартной. «Слот» изначально представляет собой материальную / аппаратную функцию, мало чем отличающуюся от термина «сокет», который иногда подвергался аналогичной смене семантики.
Так что, действительно, я чувствую некоторое сочувствие к вашему замешательству. Если вы пользователь Linux, вы можете визуализировать отчет cat /proc/cpuinfo
. Эти строки относятся к одному процессору с именем '2' из четырех:
processor : 2
...
physical id : 0
siblings : 4
core id : 2
cpu cores : 4
Говорят, что на этой машине я получил только одну микросхему (поскольку «phyical id» принимает только одно значение во всем списке, опущено), что эта одна микросхема как 4 «ядра процессора» и что этот чип работает четыре родных брата (4 потока, поэтому нет многопоточности). В этом случае есть 4 обрабатывающих элемента и 4 ядра процессора.
В приведенном выше примере с многопоточностью вы увидите список для 16 процессоров , 2 значения для «физического идентификатора» (чипы), «ядер процессора», равного 4 (на чип), и «братьев и сестер» 'равно 8 (на чип), поскольку на этом чипе включена многопоточность. В этом случае у вас в четыре раза больше процессоров, чем у ядер.
Следовательно, в этом расширенном контексте «процессор» указывает на способность машины работать над «процессом», и это то, что MPI и вы хотите использовать, независимо от количества и возможностей ядер, которые могут это включить. Вам нужно только получить представление о том, откуда берутся эти возможности обработки.
Еще одна полезная команда Linux - это lscpu
:
...
CPU(s): 4
On-line CPU(s) list: 0-3
Thread(s) per core: 1
Core(s) per socket: 4
Socket(s): 1
...
На самом деле «сокет» - это физическое соединение в материнской плате, к которой подключен чип, так что это действительно название чипа. На самом деле здесь нет многопоточности.
Я обязан обсуждению в этом другом сообщении https://unix.stackexchange.com/q/146051/132913