В 70-х годах бывший сотрудник и один из руководителей фирмы CDC Seymour Cray (Сеймур Крей) организовал собственную фирму, которая занялась проектированием сверхбыстродействующей ЭВМ, известной под названием Cray-1 с быстродействием, превосходящим 150 млн. операций в секунду с широким использованием новой интегральной технологии.
Память этой машины выполнена в виде 16 блоков, общей емкостью в 1 млн. 64 разрядных слов. Допускается одновременное обращение к этим блокам таким образом, что реальное время обращения становится равным 12,5 нсек, в то время как время обращения к одному блоку равно 50 нсек.
Основная память машины Cray-1 в отличие от других высокопроизводительных машин не имеет иерархическую структуру, она столь быстра что в такой иерархии отпала необходимость. Считается, что машина Cray-1 является наиболее быстродействующей из класса однопроцессорных систем.
О структурной организации этой машины целесообразно рассказать более подробно. Изложение будет основано на интересной статье Ричарда М. Расселла, одного из разработчиков этой машины, в которой приведены основные технические данные, архитектурные особенности и некоторые соображения, положенные в основу принятых структурных решений (Richard М. Russell. The CRAY-1 Computer System. Communication of the ACM. January 1978, Volume 21, Number 1).
Расселл относит машину Cray-1 к классу сверхвысокопроизводительных векторных процессоров. К этому классу относятся также машины Иллиак-IV, STAR-100, ASC.
В состав центрального процессора Cray-1 входят:
главная память, объемом до 1048576 слов, разделенная на 16 независимых по обращению блоков, емкостью 64К слов каждый;
регистровая память, состоящая из пяти групп быстрых регистров, предназначенных для хранения и преобразования адресов, для хранения и обработки векторных величин;
функциональные модули, в состав которых входят 12 параллельно работающих устройств, служащих для выполнения арифметических и логических операций над адресами, скалярными и векторными величинами;
устройство, выполняющее функции управления параллельной работой модулей, блоков и устройств центрального процессора;
24 канала ввода-вывода, организованные в 6 групп с максимальной пропускной способностью 500000 слов в секунду (2 млн. байт в сек.).
Двенадцать функциональных устройств машины Cray-1, играющие роль арифметико-логических преобразователей, не имеют непосредственной связи с главной памятью. Так же как и в машинах семейства CDC-6000, они имеют доступ только к быстрым операционным регистрам, из которых выбираются операнды и на которые засылаются результаты после выполнения соответствующих действий.
Три группы операционных регистров, непосредственно связанные с арифметико-логическими устройствами, называются основными. К ним относятся восемь так называемых А-регистров, состоящих из 24 разрядов каждый. А-регистры связаны с двумя функциональными модулями, выполняющими сложение (вычитание) и умножение целых чисел. Эти операции используются главным образом для преобразования адресов, их базирования и индексирования. Они также используются для организации счетчиков циклов. В ряде случаев А-регистры можно использовать для выполнения арифметических операций над целыми числами.
В следующую группу основных операционных регистров входят восемь 64-разрядных S-регистров, непосредственно связанных с функциональными устройствами выполнения арифметических действий со скалярными величинами, представленными с фиксированной и плавающей запятой. Эти S-регистры аналогичны по назначению Х-регистрам операндов в машине CDC-6600. Особый интерес представляют восемь 64-элементных векторных регистров, которые предназначены для хранения восьми операндов-векторов. Каждый такой операнд состоит из 64 компонент (элементов). В свою очередь каждая компонента представляет собой 64-разрядное слово, в котором хранится число с плавающей или фиксированной запятой. Компоненты вектора могут представлять собой также элементы некоторой таблицы. В системе команд машины предусмотрены специальные операции, в качестве операндов которых выступают многокомпонентные векторы. Не во всех задачах требуется обрабатывать векторы размерности 64. Специальный управляющий регистр центрального процессора задает требуемую размерность (число элементов). Этот регистр программно- управляем, что позволяет в процессе вычислений изменять размерность обрабатываемых векторов. Кроме того, в центральном процессоре предусмотрен регистр маски, с помощью которого можно блокировать выполнение арифметико- логических действий над некоторыми компонентами вектора, т. е. осуществлять выборочные покомпонентные действия. Регистр маски по своему назначению аналогичен регистру маски машины Иллиак-IV.
В вычислительных методах линейной алгебры часто встречается процедура, состоящая в том, что строку матрицы (все элементы строки матрицы) умножают на некоторую скалярную величину и затем вычитают из элементов другой строки, с тем чтобы получить, например, нулевой коэффициент при некотором неизвестном. На этой процедуре основан метод исключения Гаусса при решении систем линейных алгебраических уравнений. Выполнение такой процедуры можно запараллелить двумя несколько различными способами, приводящими, естественно, к одинаковому результату.
Поскольку в машине Cray-1 устройства, выполняющие операции умножения и вычитания, могут работать одновременно, то эту процедуру на ней можно запараллелить так. Умножить первую компоненту первого вектора на скалярную величину, после этого приступить к выполнению операции вычитания результата из первой компоненты второго вектора, а пока происходит это вычитание, параллельно выполнить операцию умножения скаляра на вторую компоненту первого вектора. Этот механизм, позволяющий совмещать различные арифметические действия, в статье Расселла назван цепочкой. В литературе этот принцип организации параллелизма иногда называют конвеерным. Сочетание конвейерного параллелизма с "покомпонентным", по мнению разработчиков машины Cray-1, составляет одну из важных особенностей и достоинств ее структурной организации.
В состав регистровой памяти центрального процессора входят две группы вспомогательных буферных регистров, сокращающих число обращений к главной памяти. В первую группу входят 64 так называемых В-регистра, которые служат для накопления операндов, поступающих из А-регистров или направляемых в А- регистры из главной памяти. Во вторую группу входят 64 буферных регистра операндов, связанных с S-регистрами. Они называются Т-регистрами и служат тем же целям в отношении главной памяти, что и В-регистры. Совместно В- и Т- регистры можно рассматривать как единый буфер для хранения часто используемых операндов и их адресов.
Поскольку к регистрам В и Т можно обращаться из программы, то их можно рассматривать как промежуточную, доступную для программы память, хранящую 24-разрядные операнды (В-регистры) и 64-разрядные операнды (Т- регистры). Пересылками между памятью к В- и Т-регистрами управляют программы пользователя. Это означает, что В- и Т-регистры можно рассматривать как программно управляемые буферы. В этом состоит отличие от механизма управления буферной памятью, принятого, например, в машинах IBM-370, который реализован аппаратным путем.
Кроме того, в состав центрального процессора машины Cray-1 входит регистровая буферная память значительного объема для промежуточного храпения команд программы, исполняемой в данный момент. Эта буферная память состоит из четырех секций, каждая по 16 слов. Последовательность команд программы предварительно поступает этот буфер. Если она содержит условный переход, то в буфере накапливаются также команды, относящиеся к последовательности, на которую возможен этот условный переход. Буфер команд является средством ускорения работы устройства управления, так как заметно минимизирует время ожидания команд из главной памяти.
Система команд машины Cray-1 прямо отражает регистровую структуру центрального процессора, своеобразие связи функциональных модулей с операционными регистрами и связи их с главной памятью. Команды машины Cray-1 двух форматов: короткие команды - 16 разрядов и длинные - 32 разряда.
Семь первых разрядов определяют код операции, затем следуют трехразрядные поля i, j, k, определяющие соответственно номер регистра результата и номера регистров исходных операндов.
В одном слове машины Cray-1 может размещаться до четырех команд короткого формата. Длинные команды могут начинаться в одном слове и продолжаться в следующем. Это позволяет плотно упаковывать команды в памяти машины и в какой-то степени ускоряет их выборку.
К главным управляющим регистрам машины относятся следующие: счетчик команд, способный адресовать каждую четвертую часть слова, регистр базы (ВА), который служит для образования абсолютного адреса при обращении к памяти и одновременно является верхней границей адресного пространства программы; регистр границы адресов (LA), содержащий нижнюю границу доступных для текущей программы адресов, регистры ВА и LA служат для защиты памяти, выделенной для программы, активной в мультипрограммном режиме. Тем самым в машине Cray-1 применен метод защиты по границам, используемый во многих машинах, в частности в машине Минск-32.
В составе центрального процессора имеется девятиразрядный регистр F, фиксирующий причину прерываний, а именно: прерывания по нормальному окончанию задачи, окончанию по ошибке, фиксирует прерывания по вводу- выводу, по появлению ошибок в операндах, по переполнениям, меткам времени и сигналам с пульта оператора машины. Специальный регистр режимов исполнения программ позволяет блокировать некоторые группы прерываний.
Система прерываний в машине Cray-1 построена по образу и подобию таковой, принятой для машин-предшественников семейства CDC, а именно, такая же, как у CDC-7600.
Схемами управления автоматически запоминаются все управляющие и основные операционные регистры прерванной программы при появлении прерывания в область главной памяти, адрес начала которой указан в специальном управляющем регистре. После этого управление автоматически передается программам операционной системы, которые анализируют причину прерывания и при необходимости запоминают в главной памяти содержимое всех групп промежуточных и буферных регистров (В, Т и V). В главной памяти для каждой задачи, идущей в мультипрограммном режиме, выделены массивы, в которых сохраняется вся информация, необходимая для продолжения прерванной программы.