Я встречал в литературе информацию о некоторых новых процессорах, таких как Intel Xeon «Nehalem-EX» с 8 ядрами и 16 потоками. О чем они здесь говорят? Я видел упоминание об этом в ссылке, так что SPARCS тоже, конечно, это не те логические потоки, порожденные кодом? Переименована ли эта гиперпоточность?
Что такое поток ЦП и как он связан с логическими потоками в коде?
Ответы (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, могут не увеличиваться, наличие большего количества наборов регистров для запуска большего количества потоков на физическом ядре может привести к лучшему использованию доступных ресурсов процессора. Ядро могло не быть насыщенным при выполнении одного потока, но выполнение нескольких может полностью заполнить все блоки.
Так что это значит для программистов?
Это означает, что нам все еще нужно будет писать многопоточное программное обеспечение - имея программу, имеющую только один поток, можно будет использовать только одно логическое ядро. Только имея хорошо написанный многопоточный код, мы можем воспользоваться преимуществами огромного количества логических ядер, которые предлагают эти процессоры.
Даже при одновременной многопоточности код выполняется в одном потоке на каждое логическое ядро.
Экстремальным вариантом многопоточного процессора является процессор типа «цилиндр». Это форма SMT, при которой процессор равномерно распределяет слоты между несколькими потоками циклически. Для этого ему нужны только копии различных регистров при использовании одного и того же набора исполнительных модулей. Таким образом, за 4 такта он поместит код из потоков 0–3 в конвейер.
Вы можете представить себе, что остальные процессоры работают аналогичным образом, в большей или меньшей степени. Вместо того, чтобы равномерно распределять слоты, он может просто использовать пустые слоты из-за проблем с управлением или данными в процессоре.
Например, когда выполняется переход, может потребоваться сбросить инструкции в конвейере. Вместо того, чтобы полностью промывать все, некоторые слоты можно использовать для других потоков. Вся идея состоит в том, чтобы повысить производительность, не тратя циклы процессора зря.
Вот как работают несколько потоков на оборудовании.
Это не переименование гиперпоточности - это гиперпоточность (это написано на той веб-странице, на которую вы указали ссылку).
Проще говоря, процессор сообщает ОС, что у него 16 ядер, поэтому он может балансировать задачи на удвоенном количестве ядер. Технология Hyper-threading дает некоторые преимущества, поскольку в некоторых случаях две разные инструкции из двух разных программ / потоков могут выполняться на одном ядре одновременно. Но прироста на 200% это точно не даст. Я не работал с таким процессором, но я думаю, что вы можете получить около 10% -20% дополнительного времени процессора.
Гиперпоточность (кстати, торговая марка 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
Сравните это с однопроцессорными одноядерными системами, где каждый поток должен быть запланирован, и будет активным не более одного потока - это одна запущенная задача, связанная с процессором, а другие ожидают передачи ввода-вывода.
Первоначально многопоточность использовалась либо для моделирования набора параллельных действий (а не для модели, которая фактически не выполнялась параллельно), либо для создания внешнего вида системы, которая реагировала даже при выполнении операций ввода-вывода. Например, без потоковой передачи ваш текстовый процессор зависнет при сохранении документа.
В течение многих лет я сопротивлялся идее иметь несколько потоков в моих настольных приложениях - это усложняло код и потенциально снижало производительность - подумайте обо всех тех мьютексных операциях, которые требуют участия ядра ОС. С появлением фактически параллельного выполнения потоков мои возражения уменьшились, но я по-прежнему считаю, что несколько процессов, а не несколько потоков в одном процессе, являются лучшим подходом.
Крис
Модель потоковой обработки каждой операционной системы должна сопоставлять потоки уровня ОС с потоками аппаратного уровня, такими как описанные в вопросе.
Логические потоки, порожденные высокоуровневыми языками программирования, используемыми программистами приложений, по-прежнему находятся на уровне ОС, удаленном от оборудования, если, конечно, вы не говорите о коде ОС, который выполняет отображение.