мульти-процессор, многоядерный и гипер-поток
может ли кто-нибудь порекомендовать мне некоторые документы, чтобы проиллюстрировать различия между multi-CPU, multi-core и hyper-thread? Я всегда смущен этими различиями и плюсами/минусами каждой архитектуры в разных сценариях.
EDIT: вот мое текущее понимание после обучения в интернете и изучения комментариев других; может ли кто-нибудь просмотреть комментарий, пожалуйста?
- Я думаю, что hyper-thread является самой низкой технологией среди них, но дешевый. Его основная идея-дублировать регистры для экономии времени переключения контекста;
- Multi процессор лучше, чем hyper-thread, но так как разные процессоры находятся на разных чипах, связь между различными процессорами имеет более длительную задержку, чем многоядерный, и с использованием нескольких чипов, есть больше расходов и больше энергопотребления, чем с многоядерным;
- multi-core интегрирует все процессоры на одном чипе, поэтому задержка связи между различными процессорами значительно снижается по сравнению с мульти-процессоров. Поскольку он использует один чип, чтобы содержать все процессоры, он потребляет меньше энергии и дешевле, чем многопроцессорная система.
спасибо заранее, Джордж!--1-->
3 ответов
Multi-CPU была первая версия: у вас будет одна или несколько материнских плат с одним или несколькими чипами процессора на них. Основная проблема заключалась в том, что процессоры должны были предоставить некоторые из своих внутренних данных другому процессору, чтобы они не мешали им.
следующим шагом была гиперпоточность. Один чип на материнской плате, но у него были некоторые части дважды внутри, поэтому он мог выполнять две инструкции одновременно.
нынешнее развитие многоядерных. Это в основном оригинальная идея (несколько полных процессоров), но в одном чипе. Преимущество: дизайнеры чипов могут легко поместить дополнительные провода для сигналов синхронизации в чип (вместо того, чтобы направлять их на штырь, а затем через переполненную материнскую плату и во второй чип).
супер компьютеры сегодня мульти-процессор, многоядерный: у них есть много материнских плат с обычно 2-4 процессорами на них, каждый процессор многоядерный и каждый имеет свою собственную ОЗУ.
[EDIT] у вас есть это в значительной степени право. Всего несколько незначительных моментов:
Hyper-threading отслеживает два контекста сразу в одном ядре,подвергая больше параллелизма ядру процессора вне порядка. Это поддерживает работу блоков выполнения, даже если один поток застопорился на пропуске кэша, неправильном толковании ветви или ожидании результатов от инструкций с высокой задержкой. Это способ получить большую общую пропускную способность без репликации большого количества оборудования, но если что-то замедляет каждый поток отдельно. см. Этот Q&A для получения более подробной информации, и объяснение того, что было не так с предыдущей формулировкой этого пункта.
-
основная проблема с multi-CPU заключается в том, что код, запущенный на них, в конечном итоге получит доступ к ОЗУ. Есть N процессоров, но только одна шина для доступа к ОЗУ. Таким образом, у вас должно быть некоторое оборудование, которое гарантирует, что a) каждый процессор получает достаточное количество доступа к ОЗУ, b) доступ к той же части ОЗУ не вызывает проблем и c) большинство важно отметить, что CPU 2 будет уведомлен, когда CPU 1 записывает на некоторый адрес памяти, который CPU 2 имеет во внутреннем кэше. Если этого не произойдет, CPU 2 с радостью использует кэшированное значение, не обращая внимания на то, что оно устарело
просто представьте, что у вас есть задачи в списке и вы хотите распространить их на всех доступных процессорах. Таким образом, CPU 1 получит первый элемент из списка и обновит указатели. CPU 2 сделает то же самое. По соображениям эффективности, оба ЦП не только скопируют немногие байты в кэш, но целая "строка кэша" (что бы это ни было). Предполагается, что, когда вы читаете байт X, Вы тоже скоро прочитаете X+1.
теперь оба процессора имеют копию памяти в своем кэше. Затем CPU 1 получит следующий элемент из списка. Без синхронизации кэша он не заметит, что CPU 2 также изменил список, и он начнет работать над тем же элементом, что и CPU 2.
Это то, что эффективно делает multi-CPU настолько сложным. Побочные эффекты этого могут приведите к производительности, которая хуже того, что вы получите, если весь код будет работать только на одном процессоре. Решение было многоядерные: вы можете легко добавить столько проводов, сколько вам нужно для синхронизации кэшей; вы даже можете скопировать данные из одного кэша в другой (обновление частей строки кэша без необходимости промывать и перезагружать ее) и т. д. Или логика кэша может убедиться, что все процессоры получают одну и ту же строку кэша при доступе к одной и той же части реального ОЗУ, просто блокируя CPU 2 для нескольких наносекунды, пока CPU 1 не внесет свои изменения.
[EDIT2] основная причина, по которой multi-core проще, чем multi-cpu, заключается в том, что на материнской плате вы просто не можете запускать все провода между двумя чипами, которые вам понадобятся для эффективной синхронизации. Плюс сигнал распространяется только на 30 см/НС (скорость света; в проводе у вас обычно намного меньше). И не забывайте, что на многослойной плате, сигналы начинают влиять друг на друга (помехи). Нам нравится думать, что 0 - это 0V и 1-5V, но на самом деле" 0 " -это что-то между -0.5 V (Овердрайв при сбросе строки из 1 - >0) и .5V и " 1 " - это что-то выше 0.8 V
Если у вас есть все внутри одного чипа, сигналы работают намного быстрее, и вы можете иметь столько, сколько хотите (ну, почти :). Кроме того, перекрестные помехи сигнала намного проще контролировать.
вы можете найти несколько интересных статей о двух процессорах, многоядерных и гиперпотоках на веб-сайт Intel или в короткой статье из Йельский Университет.
Я надеюсь, вы найдете здесь всю необходимую информацию.
в двух словах: multi-CPU или многопроцессорная система имеет несколько процессоров. Многоядерная система-это многопроцессорная система с несколькими процессорами на одной матрице. В hyperthreading несколько потоков могут работать на одном процессоре (то есть время переключения контекста между этими несколькими потоками очень мало).
Мультипроцессоры существуют уже 30 лет, но в основном в лабораториях. Multi-core - это новый популярный мультипроцессор. Серверные процессоры в настоящее время реализуют hyperthreading вместе с мультипроцессорами.
статьи Википедии по этим темам довольно показательны.