Очень длинное слово инструкции ( VLIW ) относится к архитектурам набора инструкций , которые разработаны для использования параллелизма на уровне инструкций (ILP). Процессор VLIW позволяет программам явно указывать инструкции для параллельного выполнения , тогда как обычные центральные процессоры (ЦП) в основном позволяют программам указывать инструкции для выполнения только последовательно. VLIW предназначен для обеспечения более высокой производительности без сложности, присущей некоторым другим конструкциям.
Традиционные способы повышения производительности процессоров включают в себя разделение инструкций на подшаги, чтобы инструкции могли выполняться частично одновременно (так называемая конвейеризация ), распределение отдельных инструкций для независимого выполнения в разных частях процессора ( суперскалярная архитектура ) и даже выполнение инструкций в порядке, отличном от порядка программы ( внеочередное выполнение ). [1] Все эти методы усложняют аппаратное обеспечение (более крупные схемы, более высокая стоимость и энергопотребление), поскольку процессор должен принимать все решения внутри себя, чтобы эти методы работали.
Напротив, метод VLIW зависит от программ, предоставляющих все решения относительно того, какие инструкции выполнять одновременно и как разрешать конфликты. На практике это означает, что компилятор (программное обеспечение, используемое для создания конечных программ) становится более сложным, но аппаратное обеспечение проще, чем во многих других средствах параллелизма.
Концепция архитектуры VLIW и термин VLIW были изобретены Джошем Фишером в его исследовательской группе в Йельском университете в начале 1980-х годов. [2] Его первоначальная разработка планирования трассировки как метода компиляции для VLIW была разработана, когда он был аспирантом Нью-Йоркского университета . До VLIW понятие предварительного планирования исполнительных блоков и параллелизма на уровне инструкций в программном обеспечении было хорошо устоявшимся в практике разработки горизонтального микрокода . До Фишера теоретические аспекты того, что позже будет называться VLIW, были разработаны советским ученым-компьютерщиком Михаилом Карцевым [3] на основе его работы шестидесятых годов над военными компьютерами М-9 и М-10. Его идеи были позже развиты и опубликованы в качестве части учебника [4] за два года до основополагающей статьи Фишера, но из-за железного занавеса и потому, что работа Карцева была в основном связана с военными вопросами, она оставалась в значительной степени неизвестной на Западе.
Инновации Фишера включали разработку компилятора, который мог бы нацеливаться на горизонтальный микрокод из программ, написанных на обычном языке программирования . Он понял, что для получения хорошей производительности и нацеливания на машину с широким выпуском необходимо найти параллелизм за пределами этого, как правило, в пределах базового блока . Он также разработал методы планирования регионов для определения параллелизма за пределами базовых блоков. Планирование трассировки является таким методом и включает планирование сначала наиболее вероятного пути базовых блоков, вставку компенсирующего кода для работы со спекулятивными движениями, планирование второй наиболее вероятной трассировки и так далее, пока расписание не будет завершено.
Вторым нововведением Фишера было представление о том, что целевая архитектура ЦП должна быть спроектирована так, чтобы быть разумной целью для компилятора; что компилятор и архитектура для процессора VLIW должны быть разработаны совместно. Это было отчасти вдохновлено трудностями, которые Фишер наблюдал в Йельском университете при компиляции для таких архитектур, как FPS164 Floating Point Systems , которая имела сложную архитектуру вычислений с набором инструкций (CISC), которая разделяла инициацию инструкций от инструкций, сохраняющих результат, требуя очень сложных алгоритмов планирования. Фишер разработал набор принципов, характеризующих надлежащую конструкцию VLIW, таких как самоосушающиеся конвейеры, широкие многопортовые регистровые файлы и архитектуры памяти . Эти принципы упростили для компиляторов выдачу быстрого кода.
Первый компилятор VLIW был описан в докторской диссертации Джона Эллиса, которую курировал Фишер. Компилятор был назван Bulldog, в честь талисмана Йельского университета. [5]
Фишер покинул Йельский университет в 1984 году, чтобы основать стартап-компанию Multiflow вместе с соучредителями Джоном О'Доннеллом и Джоном Раттенбергом. Multiflow выпустила серию минисуперкомпьютеров VLIW TRACE , поставив свои первые машины в 1987 году. VLIW Multiflow мог выполнять 28 операций параллельно на инструкцию. Система TRACE была реализована в виде смеси среднемасштабной интеграции (MSI), крупномасштабной интеграции (LSI) и сверхбольшой интеграции (VLSI) , упакованных в шкафы, технология устарела, поскольку она стала более экономически эффективной для интеграции всех компонентов процессора (за исключением памяти) на одном чипе.
Multiflow было слишком рано, чтобы поймать следующую волну, когда архитектура микросхем начала допускать многопоточные ЦП. [ необходимо разъяснение ] Крупнейшие компании по производству полупроводников осознали ценность технологии Multiflow в этом контексте, поэтому компилятор и архитектура впоследствии были лицензированы для большинства этих фирм.
Процессор, который выполняет каждую инструкцию одну за другой (т. е. неконвейерная скалярная архитектура), может неэффективно использовать ресурсы процессора, что может привести к потенциально низкой производительности. Производительность может быть улучшена путем одновременного выполнения различных подшагов последовательных инструкций (называемых конвейеризацией ) или даже выполнения нескольких инструкций полностью одновременно, как в суперскалярных архитектурах. Дальнейшее улучшение может быть достигнуто путем выполнения инструкций в порядке, отличном от того, в котором они встречаются в программе, что называется внеочередным выполнением . [1]
Все эти три метода повышают сложность оборудования. Перед выполнением любых операций параллельно процессор должен проверить, что инструкции не имеют взаимозависимостей . Например, если результат первой инструкции используется как вход второй инструкции, то они не могут выполняться одновременно, а вторая инструкция не может выполняться раньше первой. Современные процессоры с неупорядоченным выполнением увеличили аппаратные ресурсы, которые планируют инструкции и определяют взаимозависимости.
Напротив, VLIW выполняет операции параллельно, на основе фиксированного расписания, определяемого при компиляции программ . Поскольку определение порядка выполнения операций (включая то, какие операции могут выполняться одновременно) обрабатывается компилятором, процессору не требуется аппаратное обеспечение для планирования, которое требуется для трех описанных выше методов. Таким образом, процессоры VLIW предлагают больше вычислений с меньшей сложностью оборудования (но большей сложностью компилятора), чем большинство суперскалярных процессоров. [1] Это также дополняет идею о том, что как можно больше вычислений должно быть выполнено до выполнения программы, во время компиляции.
В суперскалярных конструкциях число исполнительных блоков невидимо для набора инструкций. Каждая инструкция кодирует только одну операцию. Для большинства суперскалярных конструкций ширина инструкции составляет 32 бита или меньше.
Напротив, одна инструкция VLIW кодирует несколько операций, по крайней мере одну операцию для каждого исполнительного блока устройства. Например, если устройство VLIW имеет пять исполнительных блоков, то инструкция VLIW для устройства имеет пять полей операций, каждое поле указывает, какая операция должна быть выполнена на соответствующем исполнительном блоке. Чтобы разместить эти поля операций, инструкции VLIW обычно имеют ширину не менее 64 бит, а на некоторых архитектурах и того больше.
Например, ниже приведена инструкция для Super Harvard Architecture Single-Chip Computer (SHARC). За один цикл он выполняет умножение с плавающей точкой, сложение с плавающей точкой и две автоинкрементные загрузки. Все это помещается в одну 48-битную инструкцию:
f12 = f0 * f4, f8 = f8 + f12, f0 = dm(i0, m3), f4 = pm(i8, m9);
С самых первых дней компьютерной архитектуры [6] некоторые ЦП добавляли несколько арифметико-логических устройств (АЛУ) для параллельной работы. Суперскалярные ЦП используют аппаратное обеспечение для определения того, какие операции могут выполняться параллельно во время выполнения, в то время как VLIW ЦП используют программное обеспечение (компилятор) для определения того, какие операции могут выполняться параллельно заранее. Поскольку сложность планирования инструкций переносится в компилятор, сложность аппаратного обеспечения может быть существенно снижена. [ требуется разъяснение ]
Похожая проблема возникает, когда результат распараллеливаемой инструкции используется в качестве входных данных для ветвления. Большинство современных ЦП угадывают, какая ветвь будет взята, еще до завершения вычисления, так что они могут загрузить инструкции для ветвления или (в некоторых архитектурах) даже начать вычислять их спекулятивно . Если ЦП угадывает неправильно, все эти инструкции и их контекст необходимо сбросить и загрузить правильные, что занимает время.
Это привело к все более сложной логике команд-диспетчеров, которая пытается угадать правильно , и простота исходных конструкций сокращенного набора команд (RISC) была подорвана. VLIW не имеет этой логики, и, следовательно, не имеет своего энергопотребления, возможных дефектов конструкции и других негативных аспектов.
В VLIW компилятор использует эвристику или профильную информацию, чтобы угадать направление ветвления. Это позволяет ему перемещаться и заранее планировать операции спекулятивно до того, как будет выбрано ветвление, отдавая предпочтение наиболее вероятному пути, который он ожидает через ветвь. Если ветвь принимает неожиданный путь, компилятор уже сгенерировал компенсирующий код, чтобы отбросить спекулятивные результаты для сохранения семантики программы.
Векторные процессорные ядра (разработанные для больших одномерных массивов данных, называемых векторами ) можно объединить с архитектурой VLIW, например, в микропроцессоре Fujitsu FR-V , что еще больше увеличивает пропускную способность и скорость . [ требуется ссылка ]
Cydrome была компанией, производившей числовые процессоры VLIW с использованием интегральных схем с эмиттерно-связанной логикой (ECL) в тот же период времени (конец 1980-х). Эта компания, как и Multiflow, обанкротилась через несколько лет.
Одним из лицензиатов технологии Multiflow является Hewlett-Packard , к которой Джош Фишер присоединился после распада Multiflow. Боб Рау , основатель Cydrome, также присоединился к HP после того, как Cydrome потерпел неудачу. Эти двое возглавят исследования компьютерной архитектуры в Hewlett-Packard в 1990-х годах.
Наряду с вышеперечисленными системами, в то же время (1989–1990 гг.) Intel реализовала VLIW в Intel i860 , своем первом 64-битном микропроцессоре и первом процессоре, реализовавшем VLIW на одном кристалле. [7] Этот процессор мог работать как в простом режиме RISC, так и в режиме VLIW:
В начале 1990-х годов Intel представила микропроцессор i860 RISC. Этот простой чип имел два режима работы: скалярный режим и режим VLIW. В режиме VLIW процессор всегда выбирал две инструкции и предполагал, что одна из них была целочисленной инструкцией, а другая — с плавающей точкой. [7]
Режим VLIW i860 широко использовался в приложениях встроенного цифрового сигнального процессора (DSP), поскольку выполнение приложения и наборы данных были простыми, хорошо упорядоченными и предсказуемыми, что позволяло разработчикам в полной мере использовать преимущества параллельного выполнения, предоставляемые VLIW. В режиме VLIW i860 мог поддерживать производительность с плавающей точкой в диапазоне 20-40 MFLOPS двойной точности; очень высокое значение для своего времени и для процессора, работающего на частоте 25-50 МГц.
В 1990-х годах Hewlett-Packard исследовала эту проблему как побочный эффект продолжающейся работы над семейством процессоров PA-RISC . Они обнаружили, что ЦП можно значительно упростить, удалив сложную логику диспетчеризации из ЦП и поместив ее в компилятор. Компиляторы того времени были намного сложнее компиляторов 1980-х годов, поэтому дополнительная сложность компилятора считалась небольшой стоимостью.
VLIW CPU обычно состоят из нескольких RISC-подобных исполнительных блоков , которые работают независимо. Современные VLIW обычно имеют от четырех до восьми основных исполнительных блоков. Компиляторы генерируют начальные последовательности инструкций для VLIW CPU примерно так же, как и для традиционных CPU, генерируя последовательность RISC-подобных инструкций. Компилятор анализирует этот код на предмет зависимостей и требований к ресурсам. Затем он планирует инструкции в соответствии с этими ограничениями. В этом процессе независимые инструкции могут планироваться параллельно. Поскольку VLIW обычно представляют инструкции, запланированные параллельно с более длинным командным словом, которое включает отдельные инструкции, это приводит к гораздо более длинному коду операции (называемому very long ), чтобы указать, что выполняется в данном цикле.
Примерами современных VLIW-процессоров являются медиапроцессоры TriMedia от NXP (ранее Philips Semiconductors), однокристальный процессор Super Harvard Architecture (SHARC) DSP от Analog Devices, семейство ST200 от STMicroelectronics на основе архитектуры Lx (разработанное в лаборатории Джоша Фишера в HP Паоло Фарабоски), FR-V от Fujitsu , BSP15/16 [8] от Pixelworks , DSP CEVA-X от CEVA, DSP Jazz от Improv Systems, серия HiveFlex [9] от Silicon Hive и семейство MPPA Manycore от Kalray. Линейка DSP Texas Instruments TMS320 в своем семействе C6000 претерпела изменения, чтобы больше походить на VLIW, в отличие от более раннего семейства C5000 . Эти современные VLIW-процессоры в основном успешны как встроенные медиапроцессоры для потребительских электронных устройств.
Функции VLIW также были добавлены к конфигурируемым ядрам процессора для систем на кристалле (SoC). Например, процессор Xtensa LX2 от Tensilica включает технологию, называемую Flexible Length Instruction eXtensions (FLIX), которая позволяет использовать многооперационные инструкции. Компилятор Xtensa C/C++ может свободно смешивать 32- или 64-битные инструкции FLIX с однооперационными инструкциями RISC процессора Xtensa, которые имеют ширину 16 или 24 бита. Упаковывая несколько операций в широкое 32- или 64-битное слово инструкции и позволяя этим многооперационным инструкциям смешиваться с более короткими инструкциями RISC, FLIX позволяет разработчикам SoC реализовать преимущества производительности VLIW, устраняя при этом раздувание кода ранних архитектур VLIW. Infineon Carmel DSP — еще одно ядро процессора VLIW, предназначенное для SoC. Он использует аналогичный метод улучшения плотности кода, называемый конфигурируемым длинным словом инструкции (CLIW). [10]
За пределами рынков встраиваемой обработки, Itanium IA-64 explicitly parallel instructions computing (EPIC) и Elbrus 2000 от Intel являются единственными примерами широко используемых архитектур ЦП VLIW. Однако архитектуру EPIC иногда отличают от чистой архитектуры VLIW, поскольку EPIC выступает за полное предикцию инструкций, ротацию файлов регистров и очень длинное слово инструкции, которое может кодировать непараллельные группы инструкций. VLIW также получили значительное проникновение потребителей на рынке графических процессоров (GPU), хотя и Nvidia , и AMD с тех пор перешли на архитектуры RISC, чтобы улучшить производительность на неграфических рабочих нагрузках.
Микроархитектура TeraScale компаний ATI Technologies (ATI) и Advanced Micro Devices (AMD) для графических процессоров (GPU) представляет собой микроархитектуру VLIW.
В декабре 2015 года в России была осуществлена первая поставка ПК на базе VLIW CPU Эльбрус-4с . [11]
Neo от REX Computing — это процессор, состоящий из двумерной сетки ядер VLIW, нацеленный на энергоэффективность. [12]
Эльбрус 2000 и его преемники — российские 512-битные VLIW-микропроцессоры, разработанные Московским центром SPARC-технологий (МЦСТ) и производимые компанией TSMC .
Когда кремниевая технология позволила создавать более широкие реализации (с большим количеством исполнительных устройств), скомпилированные программы для более раннего поколения не работали на более широких реализациях, поскольку кодирование двоичных инструкций зависело от количества исполнительных устройств машины.
Transmeta решила эту проблему, включив в свою реализацию Crusoe архитектуры x86 слой двоично-бинарного программного компилятора (называемый морфингом кода ) . Этот механизм был объявлен в основном для перекомпиляции, оптимизации и трансляции кодов операций x86 во время выполнения во внутренний машинный код ЦП. Таким образом, чип Transmeta внутренне является процессором VLIW, эффективно отделенным от набора инструкций CISC x86 , который он выполняет.
Архитектура Itanium компании Intel (среди прочих) решила проблему обратной совместимости с помощью более общего механизма. В каждой из инструкций с несколькими кодами операций выделяется битовое поле для обозначения зависимости от предыдущей инструкции VLIW в потоке инструкций программы. Эти биты устанавливаются во время компиляции , тем самым освобождая оборудование от вычисления этой информации о зависимости. Наличие этой информации о зависимости, закодированной в потоке инструкций, позволяет более широким реализациям выдавать несколько независимых инструкций VLIW параллельно за один цикл, в то время как более узкие реализации будут выдавать меньшее количество инструкций VLIW за один цикл.
Другим предполагаемым недостатком конструкций VLIW является раздувание кода , которое происходит, когда один или несколько исполнительных блоков не имеют полезной работы и, таким образом, должны выполнять инструкции No Operation NOP . Это происходит, когда в коде есть зависимости, и конвейеры инструкций должны быть опустошены, прежде чем последующие операции смогут продолжиться.
Поскольку число транзисторов на кристалле возросло, предполагаемые недостатки VLIW стали менее значимыми. Архитектуры VLIW становятся все более популярными, особенно на рынке встраиваемых систем , где можно настроить процессор для приложения в системе на кристалле .
Для его диссертации
Bulldog: A Compiler for VLIW Architecture
.