Что такое поток ЦП и как он связан с логическими потоками в коде? - PullRequest
7 голосов
/ 27 мая 2009

Я видел в литературе некоторые новые процессоры, такие как Intel Xeon "Nehalem-EX" с 8 ядрами и 16 потоками. О чем они здесь говорят? Я упоминал об этом в ссылке, так что SPARCS тоже, конечно, это не тот тип логических потоков, порождаемых кодом? Это гиперпоточность переименована?

Ответы [ 5 ]

10 голосов
/ 27 мая 2009

Да, Процессоры на базе Nehalem реализуют Гиперпоточность .

Новый Nehalem-EX, на который вы ссылаетесь, имеет 8 физических ядер, каждое из которых можно рассматривать как 2 логических ядра, в общей сложности 16 логических ядер, что позволяет выполнять 16 потоков приложений на одном процессоре.

Это та же технология, которая использовалась в процессорах Pentium 4 с поддержкой Hyper-Threading, а в последнее время и в процессорах Atom. Мой Eee PC имеет одноядерный процессор Atom, который имеет два логических ядра - диспетчер задач Windows покажет два графика процессора; по одному на каждое логическое ядро.

Sun UltraSPARC T2 (и T1) также допускают одновременную многопоточность (из которых реализация Intel называется Hyper-Threading - торговая марка Intel), которая допускает одно ядро отображаться как несколько логических ядер для выполнения нескольких потоков на одном ядре.

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

Хотя физические возможности, такие как ALU и FPU, могут не увеличиваться, наличие большего количества наборов регистров для запуска большего количества потоков на физическом ядре может привести к лучшему использованию доступных ресурсов процессора. Ядро, возможно, не было насыщено при выполнении одного потока, но выполнение нескольких может привести к насыщению всех модулей до его полного потенциала.

Так что это значит для программистов?

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

Даже при одновременной многопоточности код выполняется в одном потоке на логическое ядро.

4 голосов
/ 27 мая 2009

Экстремальным многопоточным процессором является бочкообразный процессор. Это форма SMT, в которой процессор разделяет слоты между несколькими потоками одинаково в циклическом порядке. Для этого ему нужны только копии различных регистров при использовании одного и того же набора исполнительных блоков. Таким образом, за 4 такта он поместил бы код из потоков 0-3 в конвейер.

Вы можете думать об остальных этих процессорах, работающих в той или иной степени, в большей или меньшей степени. Вместо равномерного распределения слотов, он может просто использовать пустые слоты из-за опасности управления или данных в процессоре.

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

Так работает несколько потоков в аппаратном обеспечении.

2 голосов
/ 27 мая 2009

Это не гиперпоточность переименована - это гиперпоточность (написано на этой веб-странице, на которую вы дали ссылку).

Проще говоря, процессор сообщает ОС, что у него 16 ядер, поэтому он может балансировать задачи на удвоенном количестве ядер. Технология Hyper-Threading дает некоторое преимущество, потому что в некоторых случаях две разные инструкции из двух разных программ / потоков могут выполняться на одном ядре одновременно. Но наверняка это не даст 200% ускорения. Я не работал на таком процессоре, но я думаю, что вы можете получить от 10% до 20% дополнительного времени процессора.

1 голос
/ 27 мая 2009

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

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

1 голос
/ 27 мая 2009

Гиперпоточность (кстати, торговая марка INTEL) позволяет каждому потоку фактически работать одновременно. Таким образом, в этом случае вы можете запускать потоки приложений 8X2 одновременно.

Из брошюры ...

Архитектура Intel Nehalem построена на основе уникального 45-нм технологического процесса Intel High-K Metal Gate

 Up to **8 cores** per processor
 Up to **16 threads per processor** with Intel® Hyper-threading
 2.3 billion transistors

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

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

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

Chris

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...