Изначально у меня была мысль опубликовать на habr статью о современных VLIW-процессорах. Думаю, далеко не все читатели в курсе, что сейчас происходит ренессанс VLIW-подобных архитектур в области предметно-ориентированных ускорителей. Такие компании, как Xilinx, Synopsys и Cadence, даже предоставляют "конструкторы" для сборки VLIW-процессоров под задачи клиента. Но начало статьи, в контексте истории VLIW, планировалось посвятить неожиданной для меня исторической находке, давшей название заголовку заметки, которую вы сейчас читаете. Увы, пока совершенно некогда писать развернутую статью о VLIW-процессорах. Но и молчать о своей находке я тоже не могу! Несколько лет назад я беседовал с одним из наших заслуженных процессоростроителей, который, несмотря на преклонные годы, до сих пор активен в типичной организации с приставками "ФГУП" и "НИИ". Говорили мы о забытых достижениях в области высокопроизводительных вычислительных систем, речь шла о SIMD, VLIW и прочем. Мой собеседник посетовал, что о многих действительно оригинальных советских решениях в области спецвычислений до сих пор информация закрыта. Есть и еще один проблемный момент с историей советских компьютеров. Как ни странно, речь о концентрации внимания историков на одних только характеристиках железа. Понятно, что устройство машины -- это важно и интересно, но ведь за каждой разработанной ЭВМ с передовой архитектурой стоит какая-то теория и методики разработки, которые устаревают значительно медленнее, чем сами разработанные машины. Хорошими примерами такого рода материалов являются "однородные вычислительные системы, структуры и среды" Евреинова или же теория "ярусно-параллельных форм" Поспелова. Но в целом подобной информации, увы, в открытом доступе очень немного. Перехожу, наконец, к сути! В интернете можно найти обрывочные сведения о том, что "первой советской VLIW-машиной" является нереализованный проект M-9 или же вдохновленная им машина М-10. На сайте ИНЭУМа о М-9 есть следующая информация: "...Дополнительный выигрыш в повышении производительности на 1-2 десятичных порядка мог быть получен за счет второй основной идеи, предложенной в проекте М-9. Она заключалась в синхронном объединении нескольких машин в одну вычислительную систему. При таком синхронном объединении все машины должны были работать от одного тактового генератора, выполнять операции за 1-2 такта. В конце операции и в начале следующей операции был возможен обмен между любыми арифметическими и запоминающими устройствами машин, объединенных в систему". Обратите внимание, о VLIW здесь прямо не говорится. В сборнике «Страницы истории отечественных ИТ» о M-9 указывают следующее: "...Еще в конце 60-х годов М. А. Карцевым были предложены принципиальные новшества в архитектуре ЭВМ и вычислительных систем: архитектура типа RISC с сокращенным набором команд, выполняемых за 1 машинный такт, и архитектура типа VLIW с длинным командным словом, задающим коды операций над векторами той или иной длины, выполняемых одновременно в двух или более многопроцессорных арифметических устройствах". При этом М-9 называют еще и векторной машиной, а иные авторы только добавляют путаницы в духе: "Комплекс М-9 был одной из первых вычислительных систем, архитектура которых впоследствии получила название VLIW (very long instruction word —очень длинная машинная команда). ЭВМ М-10 и М-13, о которых речь пойдет далее, также часто приводятся, как пример отечественных VLIW-архитектур. В каждой команде такой системы содержится несколько операций, которые должны выполняться параллельно на разных процессорах... VLIW-машина лучше всего выполняет векторные операции, в которых одна и та же операция выполняется над множеством данных (компонентов вектора) -- такой процесс оптимизируется наиболее просто. Поэтому описываемую далее М-10 часто называют векторной (векторно-параллельной) машиной...". Как и всегда в подобных случаях, для прояснения картины я обратился к прямым источникам советского времени. В частности, я попытался выяснить, оставил ли после себя разработчик легендарных M-9/М-10, М.А. Карцев, какие-то книги по созданным им машинам. Удача мне улыбнулась в виде следующего учебника: "Карцев М. А., Брик В. А. Вычислительные системы и синхронная арифметика //М.: Радио и связь. – 1981. – Т. 6". Первые две главы в этой книге написаны Карцевым и могу уверенно сказать, что они представляют интерес не только для историков, но и для специалистов по архитектуре ЭВМ! Ключевой в контексте моего поиска является глава 2 под названием "Структуры вычислительных систем". Карцев, как и многие другие ученые, не был в восторге от знаменитой классификации Флинна (SISD/SIMD/MISD/MIMD) и поэтому предложил свой вариант. Как вы уже, возможно, догадались, нашлось в новой классификации место и VLIW-машинам. Итак, речь идет о системах "типа III" и это "многопроцессорные системы с общим управлением, ориентированные на параллелизм смежных операций". Параллелизм смежных операций это, разумеется, параллелизм команд. Карцев рассматривает два варианта организации таких систем. Первый состоит в том, что "прочитав очередную инструкцию, устройство управления анализирует, имеются ли условия для того, чтобы начать ее исполнение, если возможно, -- поручает ее исполнение любому свободному процессору". Здесь речь идет о внеочередном исполнении или даже о dataflow-подобных архитектурах. Второй случай как раз рассматривает VLIW. Судите сами: "Во втором варианте устройство управления прочитывает из памяти непосредственно векторы-инструкции. Один вектор-инструкция содержит в пределе n компонент -- по числу процессоров, каждая из которых указывает, какую операцию должен выполнить соответствующий процессор". Да, "вектор-инструкция" это и есть та самая широкая команда. По поводу процесса распараллеливания: "В первом варианте анализ программы и организация параллельных вычислений производится устройством управления непосредственно на этапе исполнения программы, методом интерпретации, во втором варианте -- на этапе программирования, при трансляции программы на машинный язык. По-видимому, оптимизация программы методом трансляции может быть выполнена более эффективно, чем методом интерпретации, поскольку при трансляции можно обеспечить просмотр программы вперед на большее количество шагов". Судя по всему, Карцев был знаком с алгоритмами планирования инструкций, но, говоря о компиляции для VLIW-архитектур, ограничивался общим термином "локальная оптимизация". Эффективность VLIW-машин далее в книге детально анализируется и Карцев, в частности, пишет, что "целесообразная величина n (количество процессоров) для вычислительных систем типа III лежит в пределах 2-6". Наконец, в учебнике Карцева четко сказано о еще одном важном признаке VLIW-архитектуры: "В многопроцессорной системе типа III, работающей с вектором-инструкцией, желательно, чтобы длительность выполнения операции не зависела не только от операндов, но и от типа операции, потому что цикл работы системы и здесь подстраивается под наибольшее время работы любого из n процессоров, но теперь эти процессоры выполняют, может быть, разные операции". На мой взгляд, уже по приведенным цитатам видно, что перед нами содержательное теоретическое введение в VLIW-архитектуры. Обсуждаемая книга вышла в 1981 году, за два года до знаменитой статьи Фишера. Сама же классификация, включая те самые машины типа III, была предложена в статье Карцева 1970 года: "Вопросы построения многопроцессорных вычислительных систем. Вопр. радиоэлектроники, сер. Электронная вычислительная техника, 1970, вып. 5—6, 3—19". Осталось сравнить подходы к определению VLIW у Карцева и признанного автора VLIW -- Фишера. Как и в случае первых RISC-машин, здесь важную роль играет поддержка в виде компилятора. У Фишера VLIW-архитектура со стороны компилятора проработана детальнее, чем у Карцева и представлена, в частности, знаменитая техника trace scheduling. Тем не менее по тексту учебника "Вычислительные системы и синхронная арифметика" видно, что Карцев прекрасно понимал важность роли компилятора для рассматриваемой архитектуры. При этом с точки зрения проработки теории аппаратной стороны VLIW Карцев, на мой взгляд, ни в чем не уступает Фишеру. Я очень надеюсь, что упомянутая выше статья Карцева 1970-го года когда-нибудь появится в свободном доступе в интернете. Что же касается путаницы у процитированных выше авторов с классификацией архитектуры M-9, то, затруднение, очевидно, произошло потому, что машина М-9, в терминологии Карцева, представляла собой проект с комбинированной архитектурой. Конечно же, о комбинированных архитектурах (включающих в себя элементы SIMD, VLIW, ...) тоже подробно написано в книге "Вычислительные системы и синхронная арифметика". Ниже я привожу схему комбинированной архитектуры, о которой Карцев пишет, что она послужила прообразом для машины М-10: На верхнем уровне это массово-параллельный компьютер с распределенной памятью. Каждая связка представляет собой отдельный элемент вычислительного кластера. Связка -- это мультипроцессор с общей памятью. Элементы в составе мультипроцессора -- это VLIW-процессоры. Операции VLIW-процессора в составе вектора-инструкции являются, в свою очередь векторными, они выполняются сразу над целой линией АЛУ. Согласитесь, эта схема выглядит весьма современно! P.S. Обсуждаемую книгу легко найти на libgen.