Что такое поток ЦП и как он связан с логическими потоками в коде?

StackOverflow https://stackoverflow.com/questions/916048

Вопрос

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

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

Решение

Да, На базе Нехалема процессоры реализуют Hyper Threading.

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

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

Солнца УльтраСПАРК Т2 (и T1) также позволяют одновременная многопоточность (реализация которого Intel называется Hyper-Threading — торговая марка Intel), которая позволяет одному ядру выступать в роли нескольких логических ядер для выполнения нескольких потоков на одном ядре.

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

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

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

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

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

Другие советы

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

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

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

Вот как несколько потоков работают на аппаратном уровне.

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

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

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

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

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

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

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

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

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

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

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

Крис

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