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

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


person MikeJ    schedule 27.05.2009    source источник


Ответы (5)


Да, процессоры на базе Nehalem реализуют Hyper-threading.

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

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

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

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

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

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

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

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

person coobird    schedule 27.05.2009

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

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

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

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

person sybreon    schedule 27.05.2009
comment
Гиперпоточность чередует интерфейс между потоками, но конкурентно разделяет исполнительные блоки в серверной части, при этом мопы планируются обычным образом. Может ли ядро ​​гиперпоточного процессора выполнять два потока одновременно? / lighterra.com/papers/modernmicroprocessors / agner.org/optimize - person Peter Cordes; 07.12.2020

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

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

person klew    schedule 27.05.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

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

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

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

Крис

person Chris McCauley    schedule 27.05.2009
comment
Вы имеете в виду 8 умножить на 16, когда пишете 8X16? Если это так, я бы предположил, что это, как и старые процессоры HT, два потока на ядро, то есть всего 16 потоков, а не 128. - person OregonGhost; 27.05.2009
comment
да. Согласно INTEL, это действительно означает 16 потоков в каждом ядре. Для этого им необходимо убедиться, что на кристалле много дублирования логики. - person Chris McCauley; 27.05.2009
comment
Очевидно, они не это имели в виду. Вы сами процитировали часть: 16 потоков на процессор. - person MSalters; 27.05.2009
comment
Я исправлюсь - все-таки не такая уж впечатляющая система :-). Спасибо! - person Chris McCauley; 27.05.2009

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

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

person AndreiM    schedule 27.05.2009