Нет, я не раскрою вам тайну, скрытую в названии.
MCp0411100101 , но я постараюсь ответить на комментарий подробно нерудо , написано в теме Процессоры «Мультиклет» стали доступнее :
Читая описание архитектурных новинок этой многоклетки, хочется употребить фразу из соседней темы: «Не понимаю».Короче говоря, MCp — это потоковый (из потока данных) процессор с оригинальной архитектурой EPIC. EPIC означает «Явно параллельные вычисления команд», то есть вычисления с явным параллелизмом инструкций.
Я использую этот термин здесь именно в этом смысле, как аббревиатуру, а не как ссылку на архитектуру Itanium. Явный параллелизм в MCp имеет совершенно иной вид.
О преимуществах MCp
Для начала скажу, что EPIC в MCp таков, что придает процессору ряд привлекательных (по крайней мере лично для меня) свойств.
- Хорошая энергоэффективность.
Что обеспечивается тем, что MCp может:
- значительно реже согласовывают свое архитектурное состояние, чем процессоры традиционных архитектур;
- естественным образом сочетать инструкции памяти, арифметические инструкции и предварительную выборку кода в параллельном асинхронном выполнении.
- Нестандартная организация ветвей предоставляет интересные возможности для реализации так называемых управляемых исполняемых, или (в классической терминологии) безопасных языков программирования.
- Функциональные языки могут быть применены к архитектуре MCp более естественно, чем к традиционным машинам.
- Особенность написания программ (имеется в виду машинный код) и особенность их исполнения делают MCp постепенно деградирующим процессором.
То есть он может не выйти из строя полностью при выходе из строя функциональных устройств, а перейти в режим работы с другим распределением вычислений, с меньшей производительностью, естественно.
В отличие от традиционных отказоустойчивых процессоров, в которых функциональные блоки (или сами процессоры) просто утраиваются, MCp в обычном режиме, когда аппаратных ошибок не возникает, может более эффективно использовать свои вычислительные мощности.
- Помимо всего этого, MCp можно сравнительно легко масштабировать (если техпроцесс позволяет) и запускать в многопоточном режиме (имеется в виду SMT — Simulcient Multi Threading) и даже с динамическим разделением ресурсов между потоками.
Я ничего не знаю о загадочных цифрах в маркировке.
Может быть, это ключ к какому-нибудь квесту «Мультиклет»? :) Нет, я серьезно не знаю.
Клетки
Ячейка (это название) — основной элемент микроархитектуры MCp. Наверное, есть более простое объяснение, что это такое, но мне проще начать с описания существующих процессоров.Любой современный процессор содержит набор определенных функциональных устройств.
Их можно разделить на несколько типов.
Давайте разберемся (для объяснения особенностей MCp мне не нужно их очень подробное описание, поэтому все поверхностно).
- АЛУ : арифметико-логические устройства в широком смысле.
То есть устройства, выполняющие всевозможные преобразования данных.
У них есть входные порты, которые получают код операции и операнды, и выходные порты, которые генерируют результаты.
- ЛГУ : устройства доступа к памяти (блок загрузки/сохранения).
Естественно, эта штука не преобразует данные, а записывает или читает из памяти.
Он имеет собственные входные и выходные порты.
- РФ : файл регистрации.
Эти устройства хранят данные с одних шин (не совсем правильное название, но не в этом суть) и выводят их на другие шины, основываясь на командах и значениях на своих входных портах.
Эти шины подключены к портам LSU или ALU. Часто говорят, что регистры — это быстрая внутренняя память процессора.
Правильнее было бы сказать, что RF — это очень эффективная внутренняя память процессора, а семантика регистров — это интерфейсы доступа к ней.
Потому что Его Величество существует.
- К.
У.
Это устройство, управляющее множеством ALU, LSU и RF (сейчас модно иметь по одному общему RF на ядро, но так было не всегда; просто уточняю), управляющее передачей сигналов между ними, выполняющее программу.
В современных традиционных высокопроизводительных процессорах само CU очень сложное и состоит из других компонентов: планировщиков, предсказателей ветвей, декодеров, очередей, буферов подтверждений и т. д. Но для целей данного рассказа мне удобнее рассматривать все это как одно устройство.
Точно так же я не разлагаю АЛУ на сумматоры и сдвигатели.
Почти во всех современных традиционных процессорах ALU, LSU и RF устроены примерно одинаково с функциональной точки зрения (если не вдаваться в тонкие детали реализации и не различать векторные и скалярные ALU; да, я согласен, что утверждение оказалось условным).
Все разнообразие моделей CPU, GPU, PPU, SPU и других xPU обеспечивается различием в логике работы разных вариантов CU (и это различие гораздо существеннее, чем различие между векторными и скалярными ALU).
Это может быть логика простого стекового процессора, CU которого должен работать в тривиальном цикле.
Считайте из его RF, который состоит из двух регистров IP (указатель на текущую инструкцию) и SP (вершина цикла), оба регистра.
Устанавливаем на входные порты LSU код операции чтения и содержимое IP (скорее всего, CU в этом случае просто соединит ВЧ-выход и вход LSU), получаем ответ — код инструкции.
Если, скажем, это код инструкции перехода, то CU должен задать на портах LSU запрос на чтение значения с вершины стека, изменить SP на единицу, отправить это значение в RF, и на следующем такте переключить выходной порт LSU с входным портом RF (на другой порт путем установки значения, соответствующего записи в IP).
Затем повторите цикл.
На самом деле это очень просто.
Похоже, зря наши профильные вузы не разрабатывают стековые процессоры в качестве упражнения.
Это могла бы быть логика сложного суперскалярного и многопоточного POWER8 с внеочередным исполнением, который выбирает несколько инструкций для каждого такта, декодирует предыдущую выборку, переименовывает регистры, управляет огромным файлом регистров (даже в i686 с у него видимых 16 регистров, размер файлов регистров может достигать 128x64 бит), предсказывает ветвления и т. д. Вы больше не сможете делать такой процессор в качестве домашнего задания.
Или это может быть довольно простой RISC-подобный CU, который в графическом процессоре выдает одну и ту же команду всем ALU, LSU и RF, упакованным в мультипроцессор.
В современном высокопроизводительном процессоре CU является наиболее сложным устройством, занимающим большую часть кристалла.
Но это пока не имеет значения.
Главное, что во всех вышеперечисленных случаях CU является один , хотя он также может нагружать работой и управлять многими другими функциональными устройствами.
Что эквивалентно можно сформулировать так: в современных процессорах возможно выполнение нескольких потоков управления (цепочек команд) с использованием одного CU (SMT, например Hyper Threading); но один поток управления не может быть выполнен с использованием нескольких CU. Ага! Мой юный падаван (мы все молоды духом и знаем, что ничего не знаем :) разгадка тайны Мультиклета близка.
Естественно, сейчас я скажу, что конструкция многоклеточного процессора такова, что он содержит несколько CU, которые работают по определенному протоколу и образуют своеобразную распределенную CU, способную выполнять один поток исполнения (один поток, то есть поток).
на нескольких ядрах.
Но сначала я скажу кое-что еще.
Так, клетка — Это аналог ядра в обычном процессоре.
Он содержит собственный CU, ALU (один, но довольно продвинутый даже в ранней версии процессор, способный выполнять операции со значениями float[2], в том числе сложные арифметические операции; разрабатываемая сейчас версия будет поддерживать вычисления с double).
Ячейки могут иметь доступ к общим RF и LSU, а могут иметь свои собственные, которые могут работать в режиме зеркала или даже RAID-5 (при необходимости; помните, самое важное слово на этом этапе проекта — «отказоустойчивость») .
И самое приятное в архитектуре MCp то, что хотя ВЧ в таких режимах будет работать заметно медленнее, производительность MCp это существенно не снизит, так как основной обмен данными при расчете происходит не через ВЧ и шунты (байпас), а через другое не запоминающее устройство — коммутатор.
Основная особенность ячеек состоит в том, что их CU могут, работая по специальному протоколу и с особым программным представлением, вместе составлять одну распределенную CU, способную выполнять один поток (в смысле потока, в смысле потока управления).
.
И они могут выполнять этот поток в параллельном, асинхронном, комбинированном режиме, когда одновременно происходит: выборка инструкций, работа с памятью и RF (это сделано очень красиво), арифметические преобразования, вычисление цели перехода( и я лично вообще от этого схожу с ума, потому что сопоставление с образцом из языков высокого уровня в это прекрасно вписывается).
И, что еще более примечательно, эти CU оказались куда более значимыми :) фактически проще, чем CU современных суперскалярных процессоров с внеочередным исполнением.
Они также способны к такому параллельному выполнению программы (уточню: но не в силу их простоты и распространенности, а, наоборот, в силу их сложности и централизации, которые необходимы для формирования специальных знаний об исполняемой программе; подробнее в следующей части текста).
На мой взгляд (который может отличаться от мнения самих инженеров, разработавших и усовершенствовавших MCp), самым главным достижением в процессоре являются именно эти CU, обеспечивающие отказоустойчивость и энергоэффективность, важные на современном этапе развития.
существование процессора.
Причем предложенный принцип их построения важен не только для микропроцессоров, но и для других высокопроизводительных распределенных вычислительных систем (например, по схожим принципам построена система RiDE).
Ээнергоэффективность.
MCp — параллельный процессор, способный выполнять 4 инструкции за такт, что совсем неплохо.
И для этого ему не нужен сложный и большой (по размерам) центральный БУ; он обходится относительно небольшими локальными устройствами для каждой ячейки.
Маленький размер означает, что они потребляют меньше энергии.
Локальный, а это значит, что можно обойтись более короткой проводкой для передачи сигналов, а значит меньше энергии будет рассеиваться, и более высоким частотным потенциалом.
Это всё +3 к энергоэффективности.
Отказоустойчивость.
Если в традиционном процессоре умирает CU, умирает весь процессор.
Если в MCp умирает одна из CU, то погибает и одна из ячеек.
Но процесс расчета может продолжаться и на оставшихся ячейках, хотя и медленнее.
Обычные процессоры традиционно утроены для обеспечения надежности.
То есть устанавливают три процессора, которые выполняют одну и ту же программу.
Если один из них начинает выходить из строя, он обнаруживается и отключается.
Архитектура MCp позволяет процессору работать в этом режиме самостоятельно, причем этим можно управлять программно: при необходимости его можно читать в высокопроизводительном режиме; при необходимости его можно прочитать в режиме с перепроверкой результатов, не тратя на это дополнительные аппаратные ресурсы, которые тоже могут отказать.
Возможны и другие режимы (насколько мне известно, они еще не запатентованы, поэтому не буду о них распространяться).
Рождение нелинейности
Теперь я попытаюсь объяснить, почему такая распределенная CU возможна, что она на самом деле может быть простой, почему она требует другого способа написания программы и чем этот метод, предложенный авторами MCp, крут. Мне опять же проще начать с описания традиционных (GPU и VLIW тоже считаются традиционными) архитектур.Давайте я уже что-нибудь скомпилирую, я уже два дня ничего не компилировал, руки уже чешутся.
cat test-habr.c && gcc -S test-habr.c && cat test-habr.s
typedef struct arrst Arrst;
struct arrst
{
Теги: #Процессоры #Высокая производительность #языки программирования #многоячеечный #mcp #Высокая производительность #Системное программирование
-
Интересные Факты Из Истории It-Технологий
19 Oct, 24 -
Lenovo Vibe S1: Первый Взгляд
19 Oct, 24 -
Порталы Или Сервисы
19 Oct, 24