многопроцессорный, многоядерный и гиперпоточный

StackOverflow https://stackoverflow.com/questions/680684

  •  22-08-2019
  •  | 
  •  

Вопрос

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

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

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

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

Это было полезно?

Решение

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

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

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

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

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

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

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

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

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

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

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

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

Другие советы

Вы можете найти несколько интересных статей о двухъядерном процессоре, многоядерности и hyper-threading на Веб-сайт Intel или в короткой статье из Йельский университет.

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top