Вопрос

У меня возникли некоторые реальные проблемы с поиском этой информации в Интернете, я в понедельник в универе, так что тогда я мог бы воспользоваться библиотекой, но чем скорее, тем лучше.Когда в системе многоядерные процессоры, принимает ли каждый процессор поток от первого процесса в очереди готовности или он принимает один поток от первого и один от второго?Также просто для проверки, потоки будут отправляться и извлекаться из многоядерных процессоров одновременно операционной системой, верно?Если бы кто-нибудь мог указать мне правильное направление с точки зрения ресурсов, это было бы здорово!

Это было полезно?

Решение

Главное - оценить, какова на самом деле архитектура машины.

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

Большинство операционных систем запускают поток планировщика на каждом ядре (так делает Linux).У планировщика есть список потоков, за которые он отвечает, и он будет запускать их в меру своих возможностей на ядре, которым он управляет.Правила, которые он использует для выбора того, какой поток запускать, будут либо циклическими, либо основанными на приоритете, и т. Д;т.е. все обычные правила планирования.Пока это похоже на планировщик, который вы нашли бы в одноядерном компьютере.В какой-то степени каждый планировщик независим от всех других планировщиков.

Однако это среда SMP, что означает, что на самом деле не имеет значения, какое ядро запускает какой поток.Это происходит потому, что все ядра могут видеть всю память, и весь код и данные для всех потоков во всей системе хранятся в этой единственной памяти.

Таким образом, планировщики общаются между собой, чтобы помочь друг другу.Планировщики со слишком большим количеством потоков для запуска могут передать поток планировщику, ядро которого используется недостаточно.Они обеспечивают балансировку нагрузки внутри машины."Передать поток" означает копирование структуры данных, которая описывает поток (идентификатор потока, какие данные, какой код).

Так что, примерно, на этом все.Поскольку единственная связь между ядрами осуществляется через память, все зависит от наличия эффективной системы семафоров взаимного исключения, которую должно обеспечивать аппаратное обеспечение.

Трудность

Итак, я нарисовал очень простую картинку, но на практике память не идеально симметрична.SMP в наши дни синтезируется поверх HyperTransport и QPI.

Давно прошли те времена, когда ядра действительно имели равный доступ к системной памяти на электронном уровне.На самом нижнем уровне своей архитектуры AMD - это чисто NUMA, и Intel почти такая же.

В настоящее время ядро должно отправлять запрос другим ядрам по высокоскоростному последовательному каналу связи (HyperTransport или QPI) с просьбой отправить данные, которые у них есть в подключенной памяти.Intel и AMD проделали хорошую работу, чтобы сделать его убедительно похожим на SMP в общем случае, но он не идеален.Получение данных в памяти, подключенных к другому ядру, занимает больше времени.Это безумно сложно - ядра теперь являются узлами сети, - но это то, что им пришлось сделать, чтобы повысить производительность.

Таким образом, планировщики учитывают это при выборе, какое ядро должно запускать тот или иной поток.Они попытаются поместить поток в ядро, которое находится ближе всего к памяти, содержащей данные, к которым поток имеет доступ.

Снова о Будущем

Если бы мировую программную экосистему можно было отучить от SMP, разработчики аппаратного обеспечения смогли бы сэкономить много места на кремнии, и у нас были бы более быстрые и эффективные системы.Это уже делалось раньше;Транспьютеры были хорошей попыткой создать строго NUMA-архитектуру.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top