многопроцессорный, многоядерный и гиперпоточный - PullRequest
75 голосов
/ 25 марта 2009

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

РЕДАКТИРОВАТЬ: вот мое текущее понимание после обучения онлайн и изучения комментариев других; Может кто-нибудь прокомментировать комментарий, пожалуйста?

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

спасибо заранее, George

Ответы [ 3 ]

82 голосов
/ 25 марта 2009

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

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

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

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

[РЕДАКТИРОВАТЬ] Вы правильно поняли. Всего несколько незначительных моментов:

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

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

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

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

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

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

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

4 голосов
/ 25 марта 2009

Интересные статьи о двухъядерных процессорах, многоядерных процессорах и гиперпоточности можно найти на сайте Intel или в короткой статье Йельского университета .

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

2 голосов
/ 25 марта 2009

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

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

Статьи в Википедии на эти темы довольно показательны.

...