Среди многих архитектур с сокращенным набором команд RISC архитектура MIPS является наиболее элегантным «танцором». Даже ее конкуренты впечатлены ее мощным влиянием. Это затронуло набор инструкций DEC Alpha (сейчас заброшенный) и HP Precision. Хотя элегантности недостаточно, чтобы сделать его неуязвимым на жестоком рынке, архитектура MIPS по-прежнему использует простейшую конструкцию, чтобы обеспечить самую высокую эффективность выполнения среди всех поколений архитектуры ЦП.
В результате инкубации академического проекта для коммерциализации архитектуры MIPS необходима простая архитектура. У компании небольшая команда дизайнеров, оставляющая производство и коммерциализацию своим партнерам по полупроводникам. В результате у нее имеется широкий круг совместных производителей полупроводниковой промышленности: LSI Logic, LSI, Toshiba, Philips, NEC и IDT являются ее партнерами. Стоит отметить, что отечественная компания Loongson выкупила свою архитектуру набора команд и стала лидером в локализации чипов.
В области процессоров начального уровня архитектура MIPS недолговечна. В настоящее время он в основном используется во встраиваемых системах, таких как маршрутизаторы, и занимает почти большую часть рынка.
ЦП с архитектурой MIPS является одним из ЦП с сокращенным набором инструкций RISC и появился в самый активный период академических исследований RISC. Аббревиатура RISC (компьютер с сокращенным набором команд) является меткой TAG для всех новых архитектур ЦП, появившихся в период с 1986 по 1989 год. Она содержит инновационные идеи для этих недавно появившихся высокопроизводительных архитектур. Кто-то ярко сказал: «RISC — это основа всех компьютерных архитектур, родившихся после 1984 года». Хотя это небольшое преувеличение, это также неоспоримый факт. Никто не может игнорировать вклад, внесенный пионерами сокращенного набора команд RISC.
Наиболее важным вкладом в область MIPS является проект MIPS в Стэнфордском университете. Почему он называется MIPS?,то есть может представлятьmicrocomputer without interlocked pipeline stages
-Нет блокировкисборочная Английское значение слова microprocessor для линии,также может представлятьmillions of instructions per second
Что значит выполнять один миллион инструкций в секунду?,Какой каламбур. Кажется,MIPSОсновным направлением исследований архитектуры по-прежнему остаетсяCPUизсборочная линия архитектуры, как заставить ее работать более эффективно. Далее начнем со сборочной линия начала говорить.
Блокировка конвейера является одним из ключевых факторов, влияющих на эффективность выполнения инструкций ЦП.
Предположим, есть ресторан, назовем его «Evie's Fish and Chip Shop». В нем каждый клиент выстраивается в очередь за едой (жареная треска, картофельные чипсы, гороховое пюре, чашка чая). После того, как официант накрывает тарелку, клиент находит столик и садится есть. Это наш обычный способ обедать в ресторанах.
Картофель фри от Иви — лучшая местная закуска. Поэтому, когда рынок большой, длинная очередь выходит за пределы магазина. Итак, когда соседний магазин сабо закрылся, Иви взяла на себя управление, расширила магазин и добавила столы. Однако это все равно не помогает. Потому что занятым гражданам некогда сесть и выпить чашечку чая. (Поскольку Иви еще не нашла причину длинной очереди…)
Жареная треска Иви и картофель фри Берта — визитные карточки магазина, и приходящие сюда покупатели будут заказывать именно эти два блюда. Но у них только одна стойка, поэтому, когда клиент заказывает чашку чая и оказывается позади покупателя, заказывающего треску с жареным картофелем, ему приходится ждать... Наконец однажды Иви пришла в голову блестящая идея: они расширили стойку, и четыре клерка, Иви, Берт, Дионис и Мэри, выстраивались в ряд, когда приходил покупатель, Иви отвечала за то, чтобы положить треску на тарелку; Берт добавил картошку фри, а Дионис наполнил тарелку гороховым пюре, Мэри налила чай и оплатила счет. Таким образом можно одновременно обслуживать четырех клиентов. Какая гениальная идея.
Длинных очередей больше нет, а выручка магазина Иви выросла…
Это конвейер, который делит повторяющуюся работу на несколько частей и каждый человек отвечает за одну из них. Хотя общее время обслуживания каждого клиента увеличивается, одновременно обслуживаются четыре клиента, что повышает общую эффективность приема пищи и оплаты счетов. На рис. 1-1 ниже представлена схема структуры сборочной линии в магазине Иви.
Итак, если мы разложим выполнение инструкции ЦП на пять этапов: выборка инструкций, декодирование, поиск операндов, выполнение операций и сохранение результатов, будет ли это очень похоже на сборочную линию в магазине Иви выше? По сути, программа, ожидающая выполнения, представляет собой очередь инструкций, ожидающих, пока процессор выполнит их одну за другой.
Конвейер, конечно, не является новым изобретением набора команд RSIC. Комплексный набор команд CSIC также использует конструкцию конвейера. Разница в том, что RSIC перепроектирует набор команд, чтобы сделать конвейер более эффективным. Так каковы же ключевые факторы, ограничивающие эффективность сборочной линии?
Все мы знаем знаменитый «эффект бочки»: количество воды в бочке определяет самый короткий кусок дерева, а не самый длинный. Аналогично, если мы обеспечим, чтобы каждый шаг выполнения инструкций занимал одинаковое время, тогда этот конвейер будет совершенно эффективным. Но реальность зачастую жестока. Рабочая частота процессора намного превышает рабочую частоту чтения и записи памяти (оба не одного порядка).
Вернемся в магазин Иви. Клиент Сирил — бедный человек, которому часто не хватает денег, поэтому Иви не будет его обслуживать, пока Мэри не получит его деньги. Итак, теперь Сирил застрял в положении Иви. Иви не будет продолжать обслуживать его, пока Мэри не обработает первых трех клиентов и не оплатит за него счет. Таким образом, на этом конвейере по сбору продуктов питания Сирил является нарушителем спокойствия, потому что ему нужен ресурс, который используют другие (Мэри проверяет). (В этом случае шина блокировки может использоваться для обеспечения эксклюзивного доступа к памяти, соответствующей инструкции хранения ЦП.)
Иногда Дафна и Лола покупают порцию еды и делятся ею друг с другом. Например, то, купит ли Лола картофель фри, зависит от того, купит ли Дафна чашку чая. Потому что, если бы она просто съела картошку фри, не запивая, Дафна могла бы подавиться или споткнуться. Затем Лола будет с нетерпением ждать, пока Дафна купит чашку чая у Мэри, продавца Берта, и возникнет разрыв во времени, который мы называем разрывом на конвейере. (Очень ли это похоже на условное ветвление?)
Конечно, не все зависимости плохи. Предположим, есть покупатель Фрэнк, который всегда подражает Фреду в заказе еды. Возможно, Фрэнк — фанат Фреда. Фактически это подразумевает основу для повышения эффективности доступа к памяти и прогнозирования ветвлений посредством обращений к кэшу.
Конечно, вы думаете, а не была бы суперэффективная сборочная линия для устранения этих проблемных клиентов? Однако здесь до сих пор живет Иви, как она может обижать клиентов. Intel, лидер отрасли по производству компьютерных процессоров, также сталкивается с этой проблемой: невозможно быть несовместимым с предыдущим программным обеспечением. Если она полностью начнет с нуля и построит новую архитектуру, она может потерять многих клиентов. Поэтому нам остается только латать старую структуру еще лет десять. Это также дает прекрасную возможность для разработки набора команд RSIC.
Согласование скорости обработки процессора компьютера и скорости чтения памяти является ключом к повышению эффективности работы процессора, что является недостатком «эффекта бочонка». Итак, чтобы ускорить доступ к памяти, в конструкцию ЦП был введен Cache. Так называемый Кэш — это небольшая высокоскоростная память, используемая для копирования фрагмента данных в память. Наименьшая единица данных в кэше — это строка, каждая строка соответствует небольшому адресу памяти (обычный размер строки — 64 байта). Каждая строка содержит не только данные, считанные из основной памяти, но также информацию об ее адресе (TAG) и информацию о состоянии. Когда ЦП хочет получить доступ к данным в памяти, блок управления памятью сначала ищет в кэше. Если данные существуют, они немедленно возвращаются в ЦП. Это называется попаданием в кэш; если они не существуют, это называется попаданием в кэш. В это время блок управления выполняет поиск соответствующих данных в основной памяти, возвращает их в ЦП и оставляет резервную копию в кэше. Конечно, Кэш не знает, какие данные нужны ЦП в следующий раз, поэтому он может хранить только те данные, которые ЦП недавно использовал. Если необходимы вновь скопированные данные основной памяти, она выберет соответствующие данные для удаления, что включает в себя алгоритм стратегии замены кэша.
Кэш может предоставлять данные, необходимые ЦП, примерно в 90% случаев, тем самым значительно увеличивая скорость, с которой ЦП считывает данные, и тем самым повышая эффективность конвейера.
Поскольку инструкции отличаются от данных и имеют атрибуты только для чтения, архитектура MIPS использует Гарвардскую структуру для разделения кэша данных и кэша инструкций. Таким образом, инструкции и переменные можно читать и записывать одновременно.
Рисунок 1.2: Конвейер этапов MIPS-5
MIPS сама по себе представляет собой архитектуру, основанную на проектировании конвейерной оптимизации. Поэтому инструкции MIPS разделены на 5 этапов. Каждый этап занимает фиксированное время. Здесь фиксированное время фактически представляет собой такт процессора (две инструкции занимают половину такта). таким образом, 5-этапный конвейер MIPS фактически занимает 4 такта).
Все инструкции строго соответствуют каждому этапу конвейера, даже если на определенном этапе ничего не происходит. В результате, пока кэш попадает в кэш, ЦП будет запускать инструкцию каждый такт.
Давайте посмотрим, что делает каждый этап:
Конечно, приведенный выше конвейер — всего лишь теоретическая модель. Но на самом деле некоторые процессоры с архитектурой MIPS имеют более длинные конвейеры или другие различия. Однако пятиуровневая конвейерная архитектура действительно является отправной точкой и основой всего этого.
Строгие правила конвейера ограничивают возможности инструкций.
Во-первых, все инструкции имеют одинаковую длину (32 бита) и инструкции чтения занимают одинаковое время. Это снижает сложность конвейера; например, в инструкции недостаточно битов для кодирования сложных шаблонов адресации.
Конечно, у этого ограничения есть и недостатки: средняя длина инструкции программы на архитектуре X86 составляет всего около 3 байт. Следовательно, архитектура MIPS занимает больше места в памяти.
Во-вторых, конвейерная конструкция архитектуры MIPS исключает реализацию инструкций, выполняющих какие-либо операции с переменными памяти. Сбор данных из памяти возможен только на этапе 4, который немного задерживается для арифметико-логического устройства. Доступ к памяти может быть осуществлен только с помощью инструкций загрузки или сохранения. (Сборка архитектуры MIPS также является одним из самых простых и понятных кодов)
Несмотря на эти проблемы, разработчики архитектуры MIPS также думают о том, как сделать ЦП более простым и эффективным, оптимизируемым компилятором. Требования эффективной оптимизации некоторых компиляторов совместимы с требованиями проектирования конвейера, поэтому ЦП архитектуры MIPS имеет 32 регистра общего назначения и использует арифметические/логические инструкции с тремя операндами. Эти сложные инструкции специального назначения также не желают генерироваться компилятором. С точки зрения непрофессионала, компилятор может обойтись без сложных инструкций.
Как отличить разницу в определении наборов инструкций RISC и CISC? По моему мнению, RISC — это описание взаимосвязи между архитектурой и набором команд. В середине 1980-х годов появился ряд новых архитектур, в которых наборы команд умело использовались для максимизации эффективности этих конвейерных архитектур. Эти умело используемые наборы команд называются сокращенными наборами команд, а архитектура, использующая эти наборы команд, также называется компьютером с сокращенным набором команд (RISC). Архитектуры ЦП, основанные на конструкции с сокращенным набором команд RSIC, включают SPARC, MIPS, PowerPC, HP Precision, DEC Alpha и ARM.
Компьютеры со сложным набором команд CISC, напротив, имеют мало общего с реализацией конвейеров. Отправной точкой проектирования CISC является главным образом простота использования кода. Компьютерная архитектура после 1985 года в основном основана на RISC. CISC в основном использовался архитектурами до 1985 года. Например, архитектура Intel X86 и серия Motorola 680x.
Подводя итог, можно сказать, что общим для RISC и CISC является описание набора инструкций, но RISC оказывает большее влияние на реализацию конвейерной архитектуры ЦП, в то время как набор инструкций CISC мало влияет на архитектуру. Однако текущая архитектура X86 в значительной степени опирается на некоторые методы реализации RISC для повышения своей производительности. Но по сути это архитектура компьютера со сложным набором команд (CISC).
За почти 40 лет развития архитектуры MIPS, хотя она и была блестящей, сейчас она приходит в упадок. В Интернете существует множество комментариев и мнений об архитектуре MIPS. Автор ничего не знает о рынке, поэтому я не буду здесь ничего с этим делать. Но лично я по-прежнему ценю концепцию архитектуры MIPS: она подчеркивает сотрудничество программного и аппаратного обеспечения для повышения производительности при одновременном упрощении проектирования аппаратного обеспечения.
Упомянем здесь отечественную компанию Loongson, известную как «отечественное ядро». Поскольку он напрямую выкупает авторизацию набора инструкций MIPS, на него не влияют технические блокировки. Более того, авторизация набора инструкций MIPS и авторизация набора инструкций ARM существенно различаются: после авторизации MIPS разработчикам разрешается настраивать архитектуру или набор инструкций, однако авторизация ARM не позволяет производителям настраивать авторизованную архитектуру; (Конечно, в последние годы ARM также разрешила таким компаниям, как Apple и Qualcomm, определять свою собственную архитектуру, авторизованную ARM). Таким образом, выбор MIPS компанией Loongson — это технологический выбор и выбор времени. Хотя набор инструкций с открытым исходным кодом RISC-V был очень популярен в последние годы, экосистему программного обеспечения на нем также необходимо разработать. Лунгсон потратил 20 лет человеческих и материальных ресурсов на архитектуру MIPS и уже добился некоторых технических достижений. Полностью развернуться и перейти на набор команд с открытым исходным кодом RISC-V также нереально. Я надеюсь, что Loongson сможет продолжать углублять свои усилия в области процессоров, постепенно улучшать экосистему и достигать истинной автономности отечественных чипов.
Большинство программистов понимают язык ассемблера благодаря архитектуре X86. В конце концов, это одна из самых ранних архитектур ЦП. Однако, когда вы видите ассемблерный код, основанный на архитектуре MIPS, вас все равно ждут сюрпризы. По моему личному мнению, язык ассемблера, основанный на архитектуре MIPS, относительно прост для понимания, в конце концов, это сокращенный набор команд. Однако в нем есть некоторые тонкости проектирования программного кода, требующие дополнительного понимания. Подведем итоги по следующим аспектам:
Исследовательская группа Стэнфордского университета, первоначально предложившая идею MIPS, уделила особое внимание архитектуре коротких конвейеров, которую можно было реализовать. Более поздние факты также доказали, что их суждения были полностью правильными. Многие проектные решения, принятые на основе конвейера, позволили легче и быстрее достичь более высокой производительности.
System V ABI
。Есть рекомендацияиз Компоновка кадра стека при вызове подпрограммы,Это позволяет сочетать программирование на ассемблере и C.,Используйте разныеиз Компилировать с параметрами компилятора。но Это не имеет никакого отношения к оборудованию,Это необходимо реализовать вручную. Операция извлечения стека не соответствует выполнению сборочной линии,Потому что он записывает два регистра (данные из стека и увеличенное значение указателя).Ранее мы обсуждали некоторые результаты, достигнутые за счет упрощения конструкции ЦП. Однако, чтобы сделать набор команд более дружественным к конвейеру, он также произвел некоторые странные эффекты, и понять их непросто:
слот задержки ветвления
,Конкретный физический смысл немного абстрактен.,Соответствует картинке выше,Это горизонтальная сетка. Для слота задержки ветвления,Если оборудование не выполняет никакой специальной обработки,Определите, следует ли переходить, а также целевой адрес перехода и т. д.,Эти задачи будут выполнены в конце этапа ALU.,На этот раз, даже если это очередная сборка слот линии не успевает предоставить адрес инструкции.
Но команда ветвления достаточно важна, чтобы обеспечить ей специальную обработку. Как видно из рисунка выше, посредством специальной обработки этап ALU может сделать целевой адрес доступным за половину такта. Вместе с опережением на полпериода выборки инструкций целевой адрес ветвления получается, когда инструкция начинает выполняться в следующем слоте конвейера. Таким образом, заказ, выполняемый блоком управления ЦП, представляет собой команду перехода, команду слота задержки перехода, а затем целевую команду перехода, без задержки между ними.
Ответственность за то, как эффективно использовать этот слот задержки ветвления, лежит на разработчике компилятора или ассемблера. Инструкции, расположенные в слотах задержки ветвления, могут быть правильно организованы для выполнения полезной работы. Инструкции, которые не влияют на последовательность выполнения, также могут быть организованы для выполнения в слотах задержки перехода.
Для инструкций условного перехода это сложнее, по крайней мере, гарантируя, что инструкция, расположенная в слоте задержки перехода, безвредна для обеих ветвей. Если нет инструкции, которую можно было бы запланировать, вы можете добавить инструкцию nop. То же самое мы часто видим в ассемблерном коде архитектуры MIPS.Слот задержки загрузки
。С оптимизациейиз Компиляторы всегда пытаются этим воспользоваться.Слот задержки загрузки。иногда,Компилятор заполнит эту позицию операцией nop. На новейшем процессоре с архитектурой MIPS,Операция загрузки также использует механизм блокировки: если вы попытаетесь использовать эти данные преждевременно,ЦП перестанет выполняться,Подождите, пока поступят эти данные。но,На ранних процессорах,Нет механизма блокировки,Использование этих данных преждевременно,Даст непредсказуемые результаты.