Суперкомпьютер своими руками

Добавил пользователь Alex
Обновлено: 05.10.2024

Когда новостники в СМИ что-то пишут об IT и хайтеке - туши свет, сливай воду. То этот школьник с уникальной операционной системой BolgenOS, то Русская Операционная Система, то парень сфлешкой бесконечного размера - ржачка необычайная.

Ученик пятого класса красноярской школы № 42 (Кольцевая, 12а) Григорий Кузнецов за несколько недель собрал миниатюрный аналог суперкомпьютера. На сборку аналога у него ушло всего лишь 10 тысяч рублей — большинство деталей для миниатюрной копии удалось найти на интернет-аукционе.

Его версия компьютера легко помещается в школьном портфеле. Но производительность этого изобретения ниже, чем у настоящего суперкомпьютера (это вычислительная машина, которая по своим техническим характеристикам многократно превосходит большинство компьютеров).

Странно, кстати, что производительность ниже. Должна быть как минимум такая же, ведь школьник - очень талантливый.

Для создания умной машины понадобилось несколько одноплатных компьютеров размером с банковскую карту, вентиляторы, алюминиевые радиаторы для охлаждения плат, оргстекло, сетевой кабель, болты и гайки. Сложную вычислительную машину Григорий собрал своими руками, соединив несколько плат в сеть.

Получившийся вычислительный кластер способен делать параллельные расчеты, совсем как “взрослый” суперкомпьютер.

В мэрии уверены, что благодаря Гришиной разработке школьники и студенты смогут изучать принципы работы сложной техники, научиться параллельному программированию и управлению искусственным интеллектом.

И будут крепче любить Родину. End of story.

Вот эта шедевральная разработка.


Суперкомпьютер подключен к локальной сети через обычный свитч, а еще он подключен, насколько я понял, к дисковому телефону.

И что-то мне это напоминало. А-а-а-а-а, вспомнил. Был же знаменитый суперкомпьютер, который профессор университета Саутгемптона Саймон Кокс собрал из 64 "малинок", то есть одноплатных компьютеров Raspberry Pi, и конструктора Lego. Вот здесь об этом можно почитать (англ.).

Значит, папа красноярского школьника рассказал сыну об этом эксперименте и они его повторили в значительно меньших масштабах. А журналисту то ли сами не сумели рассказать, что же в действительности они слепили и зачем, то ли журналист ни фига не понял и написал, как мог, а мог он немного.

А вообще эти одноплатные компьютеры - крайне интересная штука. С ними народ по всякому извращается, их же много для чего можно приспособить. Из того, что я читал - автономный skype-телефон, сделанный из обычного стационарного телефона с дисковым номеронабирателем, планшеты различных видов, игровые станции, метеозонды, настенный программируемый календарь (англ.), интеллектуальная система полива цветов, фоторамки, ноуты - и так далее и тому подобное.

Суперкомпьютер

Брайан Гуаррачи является разработчиком программного обеспечения. Он является трудящимся в составе поисковой команды в Twitter. В его профиле можно найти фразу, что ему одинаково нравятся и его твиты, и его компьютеры. И это неудивительно, так как Гуаррачи самостоятельно построил суперкомпьютер, который имеет 208 гигафлоп и обладает максимальной производительностью. Этот показатель в 17 раз выше того, что имеют все коммерчески доступные процессоры в мире.

Можно вспомнить проект Parallella Kickstarter, который должен был сделать параллельные вычисления доступными для каждого человека. Брайан использовал восемь элементов Parallella. Ядро его установки стоит примерно две с половиной тысячи долларов, платы Parallella – 800 долларов, NUCs – 1000 долларов, переключатель, питание – 120 долларов.

Физический дизайн суперкомьютера Брайан взял от знаменитого суперкомпьютера 1976 Cray 1 и немного дизайна от нового цилиндрического Mac Pro. Несмотря на то, что построение системы в круглых границах является более сложной задачей по сравнению с прямоугольной системой, завершение работы приносить больше удовлетворения. Кстати, мы забыли сказать, что его машина называется Parallac.

Параллельные вычисления, во время которых процессы протекают одновременно, позволяют решать задачи быстрее. Одной из вещей, которую Брайан любит в своем суперкомпьютере Parallac, является возможность выполнять несколько разнородных параллельных вычислительных задач одновременно и все это без потери скорости. Некоторые узлы машины могут обрабатывать изображения, а другие – производить самые сложные расчеты.

Разработка одноплатного компьютера с нуля. Пособие для начинающих Одноплатный компьютер, Разработка с нуля, Технопрон, Радиолюбители, Technobrother, Длиннопост

Я занимаюсь разработкой электроники. Начал сравнительно недавно — когда микроконтроллеры от Atmel стали известны благодаря платформе Arduino. Тогда меня это не особо заинтересовало — на тот момент я уже программировал их из AVR Studio, читал истории DiHalt и мечтал о разработке собственного автопилота. 3 курс, Новосибирск, НГУ — это было увлекательно…

Но я с интересом наблюдаю за развитием и ростом индустрии встраиваемых и портативных систем: появление RaspberryPI, многообразия SoC и плат на их основах, системы умного дома, интернет вещей, смартфоны с растущей вычислительной мощностью — все это фантастический простор для деятельности. Результатом наблюдения стало желание поучаствовать: попробовать себя в разработке простой платформы, с целью изучения и накопления опыта.

Выбор у меня был небольшой, и определялся сложностью изготовления платы — только выводные корпуса, никаких BGA, максимум четырехслойный дизайн, а все потому, что я собирался прилепить свою платку к одному сравнительно простому рабочему проекту. Еще это означало, что в последующем я получу с производства уже спаянную плату, готовую к экспериментам.

Проектирование

После чтения статей о платформе BlackSwift в потенциальных кандидатах появился Qualcom Atheros AR9331, но смутило отсутствие подробной информации в открытом доступе. Жаль, занимательный кандидат.

Меня интересовала минимальная конфигурация, достаточная, чтобы запустить на ней Linux. Соответственно к процессору была выбрана микросхема памяти на 32 МБ (256 МБит) (по тому простому принципу, что она у нас была в наличии). На тот момент я еще не вычитал на десятках форумов о существовании сложностей с этим процессором, только изучил рекомендации производителя по трассировке и, довольный как слон, делал все по рекомендациям.

Вообще, процессор (или SoC, так правильнее) интереснее с той точки зрения, что при его запуске значительно дороже выходят ошибки проектирования. Например, некорректная разводка DDR памяти может выразиться как минимум в последующих ошибках чтения-записи, как максимум — в невозможности инициализации памяти вообще. Цепи питания процессора — ошибка сожжет процессор при первом включении, интерфейсы — потеря периферии на этих интерфейсах, и так далее.

Поэтому начинать проще с изучения готовых отладочных комплектов, например официальной платы и ее документации. Платы у меня не было, но документация доступна всем желающим. В придачу полезно изучить все инструкции по применению, почитать форумы (это уже жизненный опыт :)) — в общем, изучить всю доступную информацию о жертве. После изучения начинается механическая работа — нарисовать схему, а затем и плату. Четыре слоя, минимальная ширина проводника 0.2мм, зазора 0.2мм, отверстия 0.3мм.

Подключил все, что можно подключить безболезненно – аудио входы и выходы, вывел видеосигнал на контактные площадки, всякую простую периферию — микросхему памяти с I2C интерфейсом, еще одну с SPI, держатель для uSD карты, конфигурационные перемычки, обязательно отладочный порт, и потом на свободное место все что осталось. Плата получилась небольшая — 70х40мм, с минимумом компонентов. Для NAND памяти места не осталось, но я планировал запускаться с SD/MMC. Работы на одну ночь.

Разработка одноплатного компьютера с нуля. Пособие для начинающих Одноплатный компьютер, Разработка с нуля, Технопрон, Радиолюбители, Technobrother, Длиннопост

Получилось страшненько. Слева направо: верхний слой, два внутренних, нижний. Процессор на верхнем слое, память на нижнем; на каждый сигнальный проводник DDR интерфейса по одному переходному отверстию; длины проводников выровнены, их средняя длина в пределах рекомендуемой, полигон земли между процессором и памятью почти без разрывов, и т.д.

Итак, плата спроектирована, документация на нее оформлена, все это передано в производство, и можно начинать готовиться к поступлению плат с производства. Начинаю изучать материалы на предмет нюансов запуска процессора, и натыкаюсь на стостраничные форумы, с описанием проблем и сложностей в запуске.

Спустя месяц приходят платы, и я начинаю эксперименты. Что-то в уголке подсознания всплывает, связанное с проблемами у монтажного производства.

Разработка одноплатного компьютера с нуля. Пособие для начинающих Одноплатный компьютер, Разработка с нуля, Технопрон, Радиолюбители, Technobrother, Длиннопост

Отступление
Эта система на кристалле приглянулась мне еще и тем, что несет на борту все необходимые для ее жизни регуляторы питания — как DC/DC (импульсные) так и LDO (линейные). В том числе и зарядное устройство для Li-Pol аккумулятора. Заводишь на SoC 5 вольт от USB — получаешь 1V8, 2V5, 3V3 и 4V2 на выходе. Что-то достается самому процессору, что-то уходит на память, можно аккумулятор подзарядить. Удобно. Можно сжечь все и сразу :)

SoC bringup

Прочь сомнения, подать питание!

Начинается самое интересное — bringup. Как этот термин лаконично перевести на русский в данном контексте? Попытка вдохнуть жизнь? Не звучит.

В процессоре есть свой первоначальный загрузчик, который при включении проверяет условия старта — откуда и что грузить. Он же отвечает на запросы по шине USB. Его можно сконфигурировать перемычками на плате, или однократно прошиваемой OTP-памятью. Если перемычки перепаять я еще смогу, то перепрошить неперепрошиваемое вряд ли. Распаиваю перемычки, подаю питание, и о чудо — с отладочного порта приходят первые байты данных! Это значит, что процессор доволен питанием, самые базовые его узлы запустились, и можно что-то делать дальше. Что значат эти коды, я узнал из кривоватого заголовочного файла, в виде PDF документа, с невнятными пояснениям, пропусками и за авторством huashan. Все ясно.

Хорошо, чтобы максимально оперативно работать с платой, оптимальнее будет подключить ее по проводам, и загружать исполняемый код по нажатию одной кнопки. Ок, подключаю по USB к компу. И ничего.

Никаких транзакций по шине USB, даже генерации на кварце. Плохо. Начинаю думать, изучаю плату, вспоминаю все тонкие моменты. Например, на этой плате рядом с процессором я поставил свой DC/DC преобразователь, с расчетом на питание какой-либо потребляющей нагрузки, подключил его к шине питания USB 5V, и ничем не нагрузил. Промеряю осциллографом — на входе 5 вольт, на выходе 5 вольт. Всплывают слова с производства, что-то по поводу резистора. Да, так и есть — в цепи обратной связи нет резистора. (- Капитан, капитан, якорь всплыл! — Хммм, скверная примета…)

Паяю резистор, и о чудо! Плата определяется по USB! До этого я смотрел на уровень напряжения шины питания — 5.1 вольт, никаких существенных помех, никаких пульсаций. Но процессору виднее. После запайки резистора заработал и DC/DC источник, пока без нагрузки, но, по крайней мере, перестал мешать процессору. Хорошо, что дальше.

Утилиты позволяют загрузить эти бутлеты в память процессора и запустить их на исполнение. Все так сложно, потому что после включения встроенный загрузчик ничего не знает про внешнюю оперативную память, а поскольку нет памяти – некуда загружать, к примеру, ядро Linux. Получается цепочка из нескольких звеньев, где на каждом этапе выполняется незначительный шаг вперед.

Разработка одноплатного компьютера с нуля. Пособие для начинающих Одноплатный компьютер, Разработка с нуля, Технопрон, Радиолюбители, Technobrother, Длиннопост

Для подключения к последовательным портам, для реализации всяких внутрисхемных JTAG отладчиков, программаторов и аналогичных задач в другом проекте был реализован USB-UART мост на FT2232. Двухслойный дизайн, выведены оба порта на гребенку с шагом 2 мм. В этом проекте другая история – USB-UART мост + платка сбора данных размещается в центре основной платы, и конструктив прибора предполагает ее удаление.

Все эти платы проектировались параллельно, поэтому я сразу заложил идентичные размеры и возможности гибкого соединения. Не зря :)

Разработка одноплатного компьютера с нуля. Пособие для начинающих Одноплатный компьютер, Разработка с нуля, Технопрон, Радиолюбители, Technobrother, Длиннопост

Отлично, компилирую исходники, собираю этот конструктор, загружаю, и получаю первые строчки из отладочного порта! Подсистема питания запустилась!

PowerPrep start initialize power…
Battery Voltage = 0.65V
No battery or bad battery detected. Disabling battery voltage measurements.
EMI_CTRL 0x1C084040
FRAC 0x92926152
power 0x00820710
Frac 0x92926152
start change cpu freq
hbus 0x00000003
cpu 0x00010002

Заглядываю в исходники инициализации памяти, разрешаю простейший тест, правлю ручками процедуру инициализации под мою конфигурацию платы, запускаю вновь:

PowerPrep start initialize power…
Battery Voltage = 1.74V
No battery or bad battery detected. Disabling battery voltage measurements.
EMI_CTRL 0x1C084040
FRAC 0x92926152
power 0x00820710
Frac 0x92926152
start change cpu freq
hbus 0x00000003
cpu 0x00010002
start memory test, at 0x40000000
end memory test, at 0x41FFFFFC

Замечательно! Тест памяти пройден! Это очень хорошо, теперь туда можно загрузить что-то посерьезнее.

Посерьезнее у меня это U-Boot. Я знаком с этой системой, мне она кажется вполне адекватной и функциональной. Позволяет работать с периферией — актуальные версии работают с USB, SD/MMC, Ethernet, загружать образы c FAT/ext2 разделов, передавать управление, и главное — моргать светодиодиком — все то, что нужно для счастья и более гибкой отладки на первоначальном этапе.

Поэтому не долго думая выкачиваю актуальную версию из официального репозитория, беру самую близкую конфигурацию, компилирую, собираю с индусскими бутлетами в один файл, и загружаю в процессор:

PowerPrep start initialize power…
Battery Voltage = 1.74V
No battery or bad battery detected. Disabling battery voltage measurements.
EMI_CTRL 0x1C084040
FRAC 0x92926152
power 0x00820710
Frac 0x92926152
start change cpu freq
hbus 0x00000003
cpu 0x00010002
start memory test, at 0x40000000
end memory test, at 0x41FFFFFCU-Boot 2015.04-rc3-00209-ga74ef40 (Mar 16 2015 — 12:47:34)CPU: Freescale i.MX23 rev1.4 at 227 MHz
BOOT: USB
DRAM: 32 MiB
MMC: MXS MMC: 0
MMC0: Bus busy timeout!
MMC0: Bus busy timeout!
MMC0: Bus busy timeout!
MMC0: Bus busy timeout!
Card did not respond to voltage select!
MMC init failed
Using default environmentIn: serial
Out: serial
Err: serial
Net: Net Initialization Skipped
No ethernet found.
Hit any key to stop autoboot: 0
=>

Падает при подаче питания на DDR память. Хм. Где-то я уже читал об этом. А как до этого работало? Ладно, нестабильность найдена, надо разбираться.

Вокруг микросхемы памяти расположены ее законные развязывающие конденсаторы, 8 шт. по 100 nF. Но на выходе встроенного в SoC источника питания для памяти я поставил 2x10 uF, хотя производителем рекомендовано всего 1uF (инструкции читаю, если ничего другое уже не помогает, да). Ломать, не строить: отпаиваю один конденсатор, подключаю аккумулятор, и система стартует!

На самом первом фото виден этот конденсатор — вокруг него грязь, и он припаян только одним контактом.

PowerPrep start initialize power…
Battery Voltage = 3.75V
Boot from battery. 5v input not detected
Try poweron_pll
Try turnon_mem_rail
Try init_clock
EMI_CTRL 0x1C084040
FRAC 0x92926192
Try init_ddr_mt46v32m16_133Mhz
power 0x00820710
Frac 0x92926192
start change cpu freq
hbus 0x00000003
cpu 0x00010001

Хе-хе, работает! Ок, запишу этот факт как причину потенциальных нестабильностей в будущем, ибо остался еще один 10uF, который тоже может усложнять жизнь. Теперь пробую с внешним питанием.

PowerPrep start initialize power…
Battery Voltage = 3.74V
5v source detected.Valid battery voltage detected.Booting from battery voltage source.
Mar 18 2015
07:59:13
Try poweron_pll
Try turnon_mem_rail
Try init_clock
EMI_CTRL 0x1C084040
FRAC 0x92926192
Try init_ddr_mt46v32m16_133Mhz
power 0x00820710
Frac 0x92926192
start change cpu freq

Теперь начались зависания. Более того, ситуация не регулярная, периодически проявляется при питании от аккумулятора, периодически от внешних 5В, периодически стартует и работает. Опять правлю код, отключаю переключение процессора на PLL, ядро остается работать на 24МГц. Все стабильно. Меняю делитель PLL, скручиваю частоту, и плата успешно запускается на 320 МГц. Надо попробовать рекомендацию производителя — конденсатор на 100 pF в цепи импульсного DC/DC. Место на печатной плате под конденсатор я заложил. Позже вернусь к этому вопросу.

Linux kernel

Итак, на текущий момент есть плата, стартующая с карты памяти, и загружающая U-Boot. Дальше по плану надо загружать ядро.

make ARCH=arm CROSS_COMPILE=$ mxs_defconfig
make ARCH=arm CROSS_COMPILE=$ menuconfig
make ARCH=arm CROSS_COMPILE=$ -j4 zImage modules

Вот эти три клика

При настройке ядра надо строго указать слияние ядра+dtb

Boot options ---> Use appended device tree blob to zImage ----> Supplement the appended DTB with traditional ATAG information

Надо включить Kernel low-level debugging functions вместе с early printk

И еще enable dynamic printk() support

И еще видеоподсистему отключить

И еще половину лишних и не очень драйверов

И еще собрать dtb — device tree blob, структуру, описывающую ядру базовые вещи — количество памяти, периферию SoC, и т.д.

И собрать все это в один файл

После чего можно копировать ядро на флешь.

Запускаю, и получаю kernel panic. Логично, корневой файловой системы еще нет.

В качестве собственно операционной системы я выбираю Debian. По-моему, отличный дистрибутив — простой и надежный, как деревянная палка. Беру готовую сборку, распаковываю на раздел карточки, и указываю при загрузке ядра, где искать его законную корневую.

Дааа, есть над чем поработать.

Но, тем не менее, система работает, грузится с карточки памяти, размещается во всем диапазоне DDR памяти, и по праву может называться одноплатным компьютером! Это от схемы в голове до реализации в железе.

Итого, ошибок дизайна пока что не обнаружено, хотя нарекания уже есть. Что-ж, для начала, я считаю, достаточно.

Заключение

На самом деле это только начало. Еще есть над чем поработать — разобраться с периферией, в частности интересен аудио и видеовыход, протестировать SoC на штатных частотах, а еще лучше разогнать, измерить потребляемый ток, проверить при минусовых и плюсовых температурах (интересна устойчивость DDR контроллера), проверить на ресурсоемких задачах (например, видеотрансляция с веб камеры по USB WIFI), и в результате сделать на платке WiFi-управляемый танк с камерой и направленным микрофоном. Но не сейчас. Сейчас у меня есть деловое предложение :)

Суперкомпьютер домашней сборки

Суперкомпьютеры используются в университетах, лабораториях, на предприятиях. Такие устройства имеют огромную мощность и позволяют производить миллиарды вычислений в минуту. Мощный компьютер допускается использовать и дома - он облегчит работу ученых и сделает более счастливым заядлого геймера или увлеченного программиста.

Выбор комплектующих

Суперкомпьютер обойдется дорого, даже если говорить о бюджетной версии. Мощность техники зависит от двух комплектующих - процессора и материнской платы. Достаточно посмотреть на стоимость более-менее подходящих вариантов, чтобы убедиться в необходимости вкладывать существенный средства.

Обратите внимание, конфигурация такого устройства кардинально отличается от привычной многим пользователям структуры игрового или офисного ПК. Так, например, в суперкомпьютере используется 2-4 и более физицеских процессора и видеокарты, объединенных воедино.

Обычные материнские платы в суперкомпьютерах не используют - для этого существуют кросс-платы. Их главное отличие в том, что к ним подсоединяется больше плат расширения. Если нет желания самостоятельно собирать комплектующие, то можно выбрать готовые решения.

Выбор видеокарт

Мощные домашние компьютеры часто собирают для игр, здесь не обойтись без хорошей видеокарты. Рекомендуется обратить внимание на продукцию nVidea. Торговая марка является практически монополистом и производит львиную долю продукции для геймеров. Сколько плат потребуется? Это зависит от количества процессоров. Желательно ставить в компьютер столько же карт, сколько процессоров внутри.

Также для сборки потребуется мощный кулер. Суперкомпьютер будет быстро нагреваться, поэтому к выбору кулера надо подойти ответственно. Количество кулеров также зависит от количества процессоров в устройстве.

Пользуясь системой, производительность которой достигает десятков Терафлопс, не удивляйтесь повышенному расходу энергии. При полной нагрузке система потребляет тысячи Вт.

Программная часть

Читайте также: