Введение

Суперкомпьютер, изготовленный компанией Cray Research.

История

С 1968 по 1972 год Сеймур Крей из Control Data Corporation (CDC) работал над CDC 8600, преемником его более ранних разработок CDC 6600 и CDC 7600. 8600 по сути состоял из четырех 7600 в одном корпусе, с дополнительным специальным режимом, позволявшим им работать синхронно в SIMD-режиме. Джим Торнтон, ранее работавший с Крэем над более ранними проектами, начал более радикальный проект, известный как CDC STAR 100. В отличие от подхода 8600, основанного на грубой силе, STAR пошел совершенно другим путем. Основной процессор STAR имел меньшую производительность, чем 7600, но включал в себя дополнительное аппаратное обеспечение и инструкции для ускорения наиболее часто выполняемых задач на суперкомпьютерах. К 1972 году разработка 8600 зашла в тупик: машина была настолько сложной, что невозможно было добиться ее стабильной работы. Даже один неисправный компонент мог вывести машину из строя. Крей обратился к Уильяму Норрису, генеральному директору Control Data, с предложением о полной переработке проекта. В то время компания испытывала серьезные финансовые трудности, а с учетом разработки STAR, Норрис не мог выделить необходимые средства. В результате Крей покинул CDC и основал Cray Research недалеко от лаборатории CDC. На заднем дворе приобретенного им участка в Чиппева-Фолс, Крей и группа бывших сотрудников CDC начали поиск новых идей. Поначалу создание нового суперкомпьютера казалось невозможным, но после того, как главный технический директор Cray Research посетил Уолл-стрит и нашел инвесторов, готовых поддержать Крэя, оставалось только разработать дизайн. В течение четырех лет Cray Research разрабатывала свой первый компьютер. В 1975 году был представлен Cray 1 с тактовой частотой 80 МГц. Интерес был настолько велик, что между Национальной лабораторией Лоуренса Ливермора и Национальной лабораторией Лос-Аламоса развернулась борьба за право стать первым обладателем машины, в которой в конечном итоге победила последняя и получила серийный номер 001 в 1976 году для шестимесячного тестирования. Национальным центром атмосферных исследований (NCAR) в 1977 году стал первым официальным заказчиком Cray Research, заплатив 8,86 млн долларов США (7,9 млн долларов плюс 1 млн долларов за диски) за серийный номер 3. Машина NCAR была выведена из эксплуатации в 1989 году. Компания рассчитывала продать около дюжины машин и установила соответствующую цену, но в итоге было продано более 80 Cray 1 различных модификаций по цене от 5 до 8 миллионов долларов. Эта машина сделала Сеймура Крэя знаменитостью, а его компанию – успешной, просуществовавшей до краха рынка суперкомпьютеров в начале 1990-х годов. По рекомендации исследования, проведенного Уильямом Перри, АНБ приобрело Cray 1 для теоретических исследований в области криптоанализа. По словам Будианского, "хотя в стандартных исторических обзорах Cray Research на протяжении десятилетий утверждалось, что первым клиентом компании была Национальная лаборатория Лос-Аламоса, на самом деле это было АНБ". Cray 1 с производительностью 160 MFLOPS в 1982 году был заменен Cray X MP с производительностью 800 MFLOPS, первым многопроцессорным компьютером Cray. В 1985 году был представлен Cray 2, значительно более продвинутая модель с пиковой производительностью 1,9 GFLOPS, которая стала преемником первых двух моделей, но имела ограниченный коммерческий успех из-за проблем с достижением устойчивой производительности в реальных приложениях. Поэтому была разработана более консервативная, эволюционная модель Cray Y MP, которая стала преемником Cray 1 и X MP и была представлена в 1988 году. Для сравнения, процессор в типичном смартфоне 2013 года, таком как Google Nexus 10 или HTC One, обеспечивает производительность около 1 GFLOPS, в то время как процессор A13 в iPhone 11 2019 года – 154,9 GFLOPS, чего суперкомпьютеры, последовавшие за Cray 1, достигли только в 1994 году.

Предыстория

Типичные научные задачи состоят из чтения больших объемов данных, их преобразования и последующей записи обратно. Как правило, применяемые преобразования одинаковы для всех элементов данных в наборе. Например, программа может прибавить 5 к каждому числу в наборе из миллиона чисел. В простых компьютерах программа последовательно перебирает все миллион чисел, прибавляя пять, тем самым выполняя миллион инструкций вида a = b + c. Внутри компьютера выполнение этой инструкции происходит в несколько этапов. Сначала инструкция считывается из памяти и декодируется, затем извлекается необходимая дополнительная информация – в данном случае числа b и c, – и, наконец, выполняется сама операция и сохраняется результат. В итоге компьютеру требуется десятки или сотни миллионов циклов для выполнения этих операций.

Векторовые машины

В STAR новые инструкции по сути создавали циклы за пользователя. Пользователь сообщал машине, где в памяти хранится список чисел, а затем вводил одну инструкцию вида a(1 1000000) = addv b(1 1000000), c(1 1000000). На первый взгляд, кажется, что выигрыш невелик: в этом случае машина извлекает и декодирует только одну инструкцию вместо миллиона, экономя тем самым миллион операций извлечения и декодирования, возможно, четверть общего времени. Реальный выигрыш не так очевиден. Внутри процессор компьютера состоит из ряда отдельных блоков, предназначенных для выполнения одной задачи, например, сложения чисел или чтения из памяти. Обычно, когда инструкция проходит через машину, активен только один блок в любой момент времени. Это означает, что каждый последовательный шаг всего процесса должен быть завершен, прежде чем результат будет сохранен. Введение конвейера меняет эту ситуацию. В таких машинах процессор "заглядывает вперед" и начинает извлекать следующие инструкции, пока текущая инструкция еще обрабатывается. В этой конвейерной схеме каждая отдельная инструкция по-прежнему требует одинакового времени на выполнение, но как только она завершается, следующая инструкция уже готова к выполнению, и большинство шагов, необходимых для ее выполнения, уже завершены. Векторные процессоры используют эту технику с одним дополнительным приемом. Поскольку данные имеют известный формат — набор чисел, расположенных последовательно в памяти — конвейеры можно оптимизировать для повышения эффективности извлечения данных. При получении векторной инструкции специальное оборудование настраивает доступ к памяти для массивов и максимально быстро загружает данные в процессор. Подход CDC в STAR использовал то, что сегодня известно как архитектура "память-память". Это относилось к способу сбора данных машиной. Она настроила свой конвейер для прямого чтения и записи в память. Это позволило STAR использовать векторы произвольной длины, не ограниченной длиной регистров, что делало ее очень гибкой. К сожалению, конвейер должен был быть очень длинным, чтобы обеспечить достаточное количество инструкций в обработке и компенсировать медленную память. Это означало, что при переходе от обработки векторов к выполнению операций над скалярными операндами машина несла значительные затраты. Кроме того, низкая скалярная производительность машины означала, что после переключения и выполнения скалярных инструкций производительность резко падала. В результате реальная производительность оказалась довольно разочаровывающей, что, возможно, можно было предвидеть, опираясь на закон Амдаля.

Подход Крэя

Крей изучал неудачу STAR и извлек из неё уроки. Он решил, что помимо быстрой векторной обработки, его конструкция также потребует отличной всесторонней скалярной производительности. Таким образом, при переключении режимов машина всё равно должна была обеспечивать превосходную производительность. Кроме того, он заметил, что производительность вычислений в большинстве случаев можно значительно повысить за счёт использования регистров. Подобно тому, как более ранние машины игнорировали тот факт, что большинство операций применяются к множеству точек данных, STAR игнорировал тот факт, что эти же точки данных будут многократно использоваться. В то время как STAR считывал и обрабатывал один и тот же участок памяти пять раз для применения пяти векторных операций к набору данных, было бы намного быстрее один раз загрузить данные в регистры процессора, а затем применить к ним пять операций. Однако у этого подхода были свои ограничения. Регистры были значительно дороже в плане аппаратной реализации, поэтому их количество было ограничено. Это означало, что конструкция Крэя будет менее гибкой в отношении размеров векторов. Вместо того, чтобы несколько раз считывать вектор любого размера, как это делал STAR, Cray 1 должен был считывать только часть вектора за один раз, но затем мог выполнять несколько операций с этими данными перед записью результатов обратно в память. Учитывая типичные нагрузки, Крей считал, что небольшие накладные расходы, связанные с необходимостью разбивать большие последовательные обращения к памяти на сегменты, стоили того. Поскольку типичная векторная операция заключалась в загрузке небольшого набора данных в векторные регистры и последующем выполнении нескольких операций над ним, векторная система новой конструкции имела собственный отдельный конвейер. Например, блоки умножения и сложения были реализованы как отдельные аппаратные устройства, поэтому результаты одного могли передаваться в другой внутри конвейера, а декодирование инструкций уже выполнялось в основном конвейере машины. Крей называл эту концепцию «цеплением», поскольку она позволяла программистам «связывать» несколько инструкций вместе для достижения более высокой производительности.

Выступление

В 1978 году команда из Национальной лаборатории Аргонн протестировала различные типичные рабочие нагрузки на Cray 1 в рамках предложения о покупке машины для собственных нужд, заменив их IBM 370/195. Они также планировали провести тестирование на CDC STAR 100 и Burroughs Scientific Computer, но результаты этих тестов, если они проводились, не были опубликованы. Тесты на Cray 1 проводились в Национальном центре атмосферных исследований (NCAR) в Боулдере, штат Колорадо. Единственной другой доступной в то время машиной Cray была машина в Лос-Аламосе, но для доступа к ней требовался допуск Q. Результаты тестов были представлены в двух вариантах. Первый – минимальные изменения, необходимые для запуска программы без ошибок, без попыток использовать векторизацию Cray. Второй включал умеренный набор обновлений кода, часто с развертыванием циклов для обеспечения возможности векторизации. В целом, минимально измененные программы работали примерно с той же скоростью, что и 370, и примерно в два раза быстрее (в основном из-за большего диапазона экспонент на Cray), но векторизация приводила к дальнейшему увеличению производительности в 2,5–10 раз. В одной из тестовых программ, выполнявшей быстрое преобразование Фурье, производительность улучшилась с 47 секунд на IBM до 3 секунд. Другой, более медленный, логический элемент MECL 10K 5 4 NOR использовался для разветвления адресной шины, 16×4-битная высокоскоростная (6 нс) статическая оперативная память (SRAM) использовалась для регистров, а 1024×1-битная 48 нс SRAM – для основной памяти. Эти интегральные схемы поставлялись компаниями Fairchild Semiconductor и Motorola. Всего в Cray 1 было около 200 000 логических элементов. Интегральные схемы монтировались на большие пятислойные печатные платы, на каждой из которых размещалось до 144 интегральных схем. Затем платы устанавливались спиной к спине для охлаждения (см. ниже) и размещались в двадцати четырех стойках, каждая из которых содержала 72 двойные платы. Типичный модуль (отдельный процессорный блок) требовал одной или двух плат. Всего в машине было 1662 модуля 113 различных типов. Каждый кабель между модулями представлял собой витую пару, обрезанную до определенной длины для обеспечения точного времени прибытия сигналов и минимизации электрических отражений. Каждый сигнал, генерируемый схемой ECL, был представлен дифференциальной парой, что обеспечивало баланс сигналов. Это делало потребление энергии более стабильным и снижало перекрестные помехи. Нагрузка на источник питания была настолько хорошо сбалансирована, что Cray утверждала, что источник питания не требует регулировки. Для источника питания вся компьютерная система выглядела как простой резистор. Высокопроизводительная схема ECL генерировала значительное количество тепла, и конструкторы Cray уделили столько же внимания проектированию системы охлаждения, сколько и остальной механической конструкции. В этом случае каждая плата соединялась со второй, расположенной спиной к спине, с медным листом между ними. Медный лист отводил тепло к краям корпуса, где жидкий фреон, циркулирующий в трубах из нержавеющей стали, отводил его в блок охлаждения под машиной. Первый Cray 1 был задержан на шесть месяцев из-за проблем в системе охлаждения; смазочный материал, обычно смешиваемый с фреоном для поддержания работы компрессора, просачивался через уплотнения и в конечном итоге покрывал платы маслом, вызывая короткое замыкание. Для надлежащей герметизации трубок потребовались новые методы сварки. Чтобы максимально увеличить скорость работы машины, все шасси было согнуто в большую форму буквы "С". Компоненты системы, зависящие от скорости, были размещены на "внутреннем крае" шасси, где длина проводов была меньше. Это позволило уменьшить время цикла до 12,5 нс (80 МГц), что было не так быстро, как 8 нс у 8600, от которой отказались, но достаточно быстро, чтобы превзойти CDC 7600 и STAR. NCAR оценила, что общая пропускная способность системы была в 4,5 раза выше, чем у CDC 7600. Cray 1 был построен как 64-битная система, в отличие от 7600/6600, которые были 60-битными машинами (изменение также планировалось для 8600). Адресация была 24-битной, с максимальным объемом 1 048 576 64-битных слов (1 мегаслово) основной памяти, каждое слово также содержало восемь битов четности, что в сумме составляло 72 бита на слово. Память была распределена по 16 чередующимся банкам памяти, каждый с циклом 50 нс, что позволяло считывать до четырех слов за цикл. Меньшие конфигурации могли иметь 0,25 или 0,5 мегаслова основной памяти. Максимальная совокупная пропускная способность памяти составляла 638 Мбит/с. MFLOPS. (Блок обратного приближения также мог работать параллельно, но не выдавал истинный результат с плавающей точкой – для получения полного результата деления требовались два дополнительных умножения.) Поскольку машина была разработана для работы с большими наборами данных, в конструкции также было предусмотрено значительное количество схем для ввода-вывода. Более ранние конструкции Cray в CDC включали отдельные компьютеры, предназначенные для этой задачи, но это больше не требовалось. Вместо этого Cray 1 включал четыре шестиканальных контроллера, каждый из которых имел доступ к основной памяти один раз за четыре цикла. Каналы были 16-битными и включали три управляющих бита и четыре бита для коррекции ошибок, поэтому максимальная скорость передачи данных составляла одно слово за 100 нс, или 500 тысяч слов в секунду для всей машины. Начальная модель, Cray 1A, весила, включая систему охлаждения фреоном. При конфигурации с 1 миллионом слов основной памяти машина и ее источники питания потребляли около 115 кВт энергии; Сеймур Крей намеренно принимал конструктивные решения, жертвуя надежностью ради скорости, но улучшил свои более поздние проекты после вопросов по этому поводу. Аналогичным образом, операционная система Cray (COS) была довольно примитивной, слабо протестированной и обновлялась еженедельно или даже ежедневно на ранних этапах.

Cray-1S

Cray 1S, анонсированный в 1979 году, являлся улучшенной моделью Cray 1, поддерживающей увеличенный объем основной памяти – 1, 2 или 4 миллиона слов. Увеличенный объем основной памяти был реализован за счет использования 4096 x 1-битных биполярных микросхем ОЗУ с временем доступа 25 нс. Миникомпьютеры Data General могли быть заменены на разработанную компанией 16-битную систему, работающую на частоте 80 МИПС. Подсистема ввода-вывода была отделена от основного вычислительного комплекса и подключалась к нему через канал управления со скоростью 6 Мбит/с и высокоскоростной канал передачи данных со скоростью 100 Мбит/с. Такое разделение делало 1S похожим на два "полу-Cray", расположенных на расстоянии нескольких футов друг от друга, что позволяло масштабировать подсистему ввода-вывода по мере необходимости. Системы предлагались в различных конфигурациях, от S/500 без подсистемы ввода-вывода и с объемом памяти 0,5 миллиона слов до S/4400 с четырьмя процессорами ввода-вывода и 4 миллионами слов памяти.

Cray-1M

Cray 1M, анонсированный в 1982 году, заменил Cray 1S. Он обладал более быстрым временем цикла – 12 нс – и использовал менее дорогую память MOS в основной памяти. Cray 1M выпускался всего в трех модификациях: M/1200 с 1 миллионом слов в 8 банках памяти, а также M/2200 и M/4200 с 2 и 4 миллионами слов соответственно в 16 банках памяти. Все эти модели включали два, три или четыре процессора ввода-вывода, а система поддерживала установку дополнительного второго высокоскоростного канала данных. Пользователи могли оснастить систему твердотельным накопителем объемом от 8 до 32 миллионов слов памяти MOS.