2009-03-25 6 views
64

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

EDIT: вот мое нынешнее понимание после изучения онлайн и изучения комментариев других; Может ли кто-нибудь просмотреть комментарий, пожалуйста?

  1. Я думаю, что hyper-thread является самой плохой технологией среди них, но дешево. Его основная идея - дублировать регистры, чтобы сохранить время переключения контекста;
  2. Многопроцессор лучше, чем гиперпоточность, но поскольку разные процессоры находятся на разных микросхемах, связь между различными процессорами имеет более длительную задержку, чем многоядерность, и с использованием нескольких микросхем, есть больше затрат и больше энергопотребления, чем при использовании многоядерные;
  3. многоядерный процессор объединяет все процессоры на одном чипе, поэтому латентность связи между различными ЦП значительно снижается по сравнению с многопроцессорными. Поскольку он использует один чип для хранения всех процессоров, он потребляет меньше энергии и дешевле, чем многопроцессорная система.

спасибо заранее, Джордж

+0

Hyperthreading не уступает. Это очень полезно, особенно для серверов. Снижаются доходы от ILP (сохранение процессора занято перестановкой последовательных инструкций). Hyperthreading - альтернатива ускорению параллелизма: несколько аппаратных потоков выполняются без больших накладных расходов. –

+0

Как насчет моих других моментов в отношении многоядерных процессоров и многопроцессорных процессоров, считаете ли вы, что мои баллы верны? Ничего плохого? – George2

+1

@ George2 - Ваше редактирование очень верно. В этом вся идея. :) Лучшее, что вы можете получить на сервере, вероятно, многоядерный многопроцессорный, но для обычного использования многоядерный - лучший снимок! –

ответ

77

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

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

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

Суперкомпьютеры сегодня являются многопроцессорными многоядерными: у них много материнских плат с обычно 2-4 процессорами на них, каждый процессор многоядерный, и каждый из них имеет собственную ОЗУ.

[EDIT] У вас это очень хорошо. Только несколько небольших точек:

  • Гиперпоточность отлеживает двух контекстов сразу в одном ядре, обнажая более параллелизм ядра процессора испорченный. Это приводит к тому, что исполнительные блоки питаются от работы, даже когда один поток застопоривается на пропуске кеша, неверно передает ответ или ожидает результатов от команд с высокой задержкой. Это способ получить более полную пропускную способность, не реплицируя много аппаратного обеспечения, но, если угодно, это замедляет каждый поток по отдельности. See this Q&A for more details и объяснение того, что было не так с предыдущей формулировкой этого пункта.

  • Основная проблема с многопроцессорным процессором заключается в том, что работающий на них код в конечном итоге будет обращаться к ОЗУ. Есть N процессоров, но только одна шина для доступа к ОЗУ. Таким образом, у вас должно быть какое-то оборудование, которое гарантирует, что: a) каждый процессор получает достаточный объем доступа к ОЗУ, b) тот доступ к той же части ОЗУ не вызывает проблем и c) самое главное, что CPU 2 будет уведомлен когда ЦП 1 записывает на некоторый адрес памяти, который имеет ЦП 2 во внутреннем кеше.Если этого не произойдет, CPU 2 с радостью будет использовать кешированное значение, не обращая внимания на то, что он устарел

    Только представьте, что у вас есть задачи в списке, и вы хотите распространить их на все доступные процессоры. Таким образом, CPU 1 будет извлекать первый элемент из списка и обновлять указатели. CPU 2 сделает то же самое. По соображениям эффективности оба процессора будут не только скопировать несколько байтов в кеш, но и всю «линию кэша» (что бы это ни было). Предполагается, что когда вы читаете байт X, вы тоже скоро увидите X + 1.

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

    Это то, что делает сложным многопроцессорный процессор. Побочные эффекты этого могут привести к производительности, которая хуже того, что вы получите, если весь код работает только на одном процессоре. Решение было многоядерным: вы можете легко добавить столько проводов, сколько необходимо для синхронизации кешей; вы могли бы даже скопировать данные из одного кеша в другой (обновление частей строки кэша без необходимости его очистки и перезагрузки) и т. д. Или логика кэша может гарантировать, что все процессоры получат одну и ту же линию кэша при доступе к одному и тому же часть реальной ОЗУ, просто блокируя CPU 2 на несколько наносекунд, пока CPU 1 не внесет свои изменения.

[EDIT2] Основная причина, почему многоядерный проще, чем многопроцессорный является то, что на материнской плате, вы просто не можете запустить все провода между двумя чипами, которые вы должны были бы сделать синхронизацию эффективной , Плюс сигнал распространяется только на вершины 30 см/нс (скорость света, в проводе у вас, как правило, гораздо меньше). И не забывайте, что на многослойной материнской плате сигналы начинают влиять друг на друга (перекрестные помехи). Нам нравится думать, что 0 - 0 В, а 1 - 5 В, но на самом деле «0» - это что-то между -0,5 В (овердрайв при отбрасывании линии от 1-> 0) и .5В, а «1» - что-то выше 0,8 В.

Если у вас есть все внутри одного чипа, сигналы работают намного быстрее, и вы можете иметь столько, сколько хотите (ну, почти :). Кроме того, перекрестные помехи намного легче контролировать.

+2

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

+0

@jcinacio, делает ли гиперпоточность улучшает производительность нескольких процессов? Зачем? – George2

+0

@Aaron, 1. Я изменил свои текущие моменты в своем оригинальном посте после обучения у вас. Не могли бы вы помочь просмотреть и прокомментировать? 2. Что означает «выставить некоторые из своих внутренних данных другому процессору, чтобы они не мешали им». в вашем посте? – George2

2

В двух словах: многопроцессорная или многопроцессорная система имеет несколько процессоров. Многоядерная система - это многопроцессорная система с несколькими процессорами на одном кристалле. При гиперпотоке несколько потоков могут работать на одном процессоре (это время переключения контекста между этими несколькими потоками очень мало).

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

Википедические статьи по этим темам весьма наглядны.

+0

Amit, 1. Я изменил свои текущие моменты в своем оригинальном посте после обучения у вас. Не могли бы вы помочь просмотреть и прокомментировать? 2. Что означает смерть и слезы на вашем посту? – George2

+0

слеза-> год (извините), die: http://en.wikipedia.org/wiki/Die_(integrated_circuit) –

+0

Хорошо учиться у вас. Амит! – George2

4

Вы можете найти интересные статьи о двойном процессоре, многоядерном и гиперпотоке на Intel's website или в короткой статье от Yale University.

Надеюсь, вы найдете здесь всю необходимую информацию.

+0

Богдан, я изменил свои текущие моменты в своем оригинальном посте. Не могли бы вы помочь просмотреть и прокомментировать? Я узнал их после прочтения рекомендуемых ссылок. – George2

+0

@ George2 - Ваше правление очень верно. В этом вся идея. :) Лучшее, что вы можете получить на сервере, вероятно, многоядерный многопроцессорный –

+1

Обе ссылки не работают :( – redobot