МАЙК
Дизайнер | Сан Микросистемс |
---|---|
Представлено | 1990-е годы |
Дизайн | ВЛИВ |
MAJC (микропроцессорная архитектура для вычислений на Java) — это Sun Microsystems, многоядерный, многопоточный с очень длинным командным словом (VLIW) микропроцессор выпускавшийся в середине-конце 1990-х годов. Процессор MAJC, первоначально называвшийся процессором UltraJava, предназначался для запуска программ Java , «поздняя компиляция» которых позволила Sun принять несколько благоприятных проектных решений. Процессор был выпущен для двух коммерческих графических карт Sun. Уроки, извлеченные из многопотоков в многоядерных процессорах, послужили основой для более поздних реализаций OpenSPARC, таких как UltraSPARC T1 .
Элементы дизайна
[ редактировать ]Перенести планирование инструкций в компилятор
[ редактировать ]Как и другие разработки VLIW, особенно Intel IA -64 (Itanium), MAJC пытался повысить производительность, перенеся несколько дорогостоящих операций из процессора в соответствующие компиляторы. В целом, конструкции VLIW пытаются исключить планировщик инструкций , который часто занимает относительно большую часть общего транзисторного бюджета процессора. Когда эта часть ЦП перенесена в программное обеспечение, эти транзисторы можно использовать для других целей, часто для добавления дополнительных функциональных блоков для одновременной обработки большего количества инструкций или для увеличения объема кэш-памяти, чтобы уменьшить время, затрачиваемое на ожидание данных. прибыть из гораздо более медленной основной памяти . Хотя MAJC разделял эти общие концепции, он отличался от других разработок VLIW и процессоров в целом во многих конкретных деталях.
Обобщенные функциональные единицы
[ редактировать ]Большинство процессоров включают в себя ряд отдельных «субпроцессоров», известных как функциональные блоки , которые настроены на работу с определенным типом данных. Например, современный ЦП обычно имеет два или три функциональных блока, предназначенных для обработки целочисленных данных и логических инструкций, известных как ALU , в то время как другие блоки обрабатывают с плавающей запятой числа , FPU или мультимедийные данные, SIMD . Вместо этого MAJC использовал один многоцелевой функциональный блок, который мог обрабатывать любые данные. Теоретически этот подход означал, что обработка любого типа данных займет больше времени, возможно, намного больше, чем обработка тех же данных в подразделении, предназначенном для этого типа данных. Но с другой стороны, эти блоки общего назначения также означали, что вы не оставляли большую часть ЦП неиспользованной, потому что программа просто выполняла множество (например) вычислений с плавающей запятой в этот конкретный момент времени.
Пакеты инструкций переменной длины
[ редактировать ]Другое отличие состоит в том, что MAJC допускает « пакеты инструкций » переменной длины, которые в VLIW содержат ряд инструкций, которые, по определению компилятора, могут выполняться одновременно. Большинство архитектур VLIW используют пакеты фиксированной длины, и когда они не могут найти команду для запуска, они вместо этого заполняют ее NOP
, который просто занимает место. Хотя пакеты инструкций переменной длины усложняли ЦП, они уменьшали размер кода и, следовательно, количество дорогостоящих промахов в кэше за счет увеличения объема кода в кэше в любой момент времени.
Избегание блокировок и остановок
[ редактировать ]Основное отличие заключалось в том, что конструкция MAJC требовала, чтобы компилятор избегал блокировок и пауз в выполнении, в то время как результаты одной инструкции должны быть обработаны для возможности выполнения следующей. Например, если процессору подаются инструкции C = A + B, E = C + D
, то вторую инструкцию можно будет выполнить только после завершения первой. Большинство процессоров включают в конструкцию блокировки для остановки и перепланирования таких взаимосвязанных инструкций, что позволяет выполнять некоторые другие инструкции во время вычисления значения C. Однако эти блокировки очень дороги с точки зрения занимаемой микросхемы и представляют собой большую часть логики планировщика инструкций.
Чтобы компилятор мог избежать этих блокировок, он должен точно знать, сколько времени потребуется для выполнения каждой из этих инструкций. Например, если конкретной реализации потребовалось три цикла для завершения умножения с плавающей запятой, компиляторы MAJC попытались запланировать другие инструкции, выполнение которых заняло три цикла и в данный момент не остановлено. Однако изменение фактической реализации может сократить эту задержку до двух инструкций, и компилятор должен будет знать об этом изменении.
Это означает, что компилятор был привязан не к MAJC в целом, а к конкретной реализации MAJC, каждый отдельный процессор основан на конструкции MAJC. Обычно это представляет собой серьезную логистическую проблему; Рассмотрим, например, количество различных вариантов конструкции Intel IA-32 : для каждого из них потребуется свой собственный специальный компилятор, и разработчику придется создать отдельный двоичный файл для каждого из них. Однако именно эта концепция движет рынком Java — для каждой ISA действительно существует свой компилятор , и он устанавливается на машине клиента, а не на машине разработчика. Разработчик отправляет только одну версию своей программы с одним байт-кодом , а машина пользователя компилирует ее в базовую платформу.
В действительности планирование инструкций таким образом оказывается очень сложной задачей. В реальных условиях процессоры, которые пытаются выполнить такое планирование во время выполнения, сталкиваются с многочисленными событиями, когда необходимые данные находятся вне кэша, и в программе нет другой инструкции, которая также не зависела бы от таких данных. В этих случаях процессор может зависать на длительное время, ожидая оперативной памяти. Подход VLIW в этом отношении мало помогает; хотя компилятор может потратить больше времени на поиск инструкций для запуска, это не означает, что он действительно сможет их найти.
MAJC попытался решить эту проблему за счет возможности выполнять код из других потоков, если текущий поток зависал в памяти. Переключение потоков обычно является очень дорогостоящим процессом, известным как переключение контекста , и на обычном процессоре такое переключение сведет на нет любую экономию и в целом замедлит работу машины. В MAJC система могла хранить в памяти состояние до четырех потоков одновременно, сокращая длину переключения контекста до нескольких инструкций. С тех пор эта функция появилась и на других процессорах; Intel называет это HyperThreading .
MAJC пошел еще дальше в этой идее и попытался предварительно получить данные и инструкции, необходимые для потоков, пока они зависли. Большинство процессоров имеют аналогичную функциональность для частей потока команд, известную как спекулятивное выполнение , когда процессор обрабатывает оба возможных результата ветвления, ожидая вычисления решающей переменной. Вместо этого MAJC продолжал выполнять поток, как если бы он не был остановлен, используя это выполнение для поиска и последующей загрузки любых данных или инструкций, которые вскоре потребуются, когда поток перестанет останавливаться. Сан назвал это пространственно-временными вычислениями (STC), и это умозрительная многопоточная конструкция.
До этого момента процессоры пытались добиться параллелизма в одном потоке, и этот метод достигал своих пределов с точки зрения уменьшающейся отдачи. Похоже, что в общем смысле конструкция MAJC пыталась избежать зависаний за счет работы между потоками (и программами), а не за счет поиска параллелизма в одном потоке. Обычно ожидается, что VLIW будет несколько хуже с точки зрения зависаний, поскольку трудно понять поведение во время выполнения во время компиляции, что делает подход MAJC для решения этой проблемы особенно интересным.
Реализации
[ редактировать ]Sun создала единственную модель MAJC, двухъядерный MAJC 5200 , который был сердцем Sun XVR-1000 и XVR-4000 для рабочих станций графических плат . Однако многие идеи многоядерности и многопоточности, особенно с точки зрения использования нескольких потоков для уменьшения задержек, нашли свое применение в линейке процессоров Sun SPARC , а также в разработках других компаний. Кроме того, идея MAJC о разработке процессора для выполнения как можно большего количества потоков, а не инструкций, по-видимому, легла в основу более поздней конструкции UltraSPARC T1 (под кодовым названием Niagara ).
См. также
[ редактировать ]Дальнейшее чтение
[ редактировать ]- Кейс, Брайан (25 октября 1999 г.). «Солнце создает MAJC с помощью зеркал». Отчет микропроцессора .
- Гвеннап, Линли (13 сентября 1999 г.). «MAJC дает VLIW новый поворот». Отчет микропроцессора .
- Хафхилл, Том (24 августа 1999 г.). «Солнце раскрывает тайны «Магии » ». Отчет микропроцессора .