![]() |
Главы из книги «Параллельная обработка данных».Глава 12. Технологии программируемой логики сегодня.В предыдущей главе мы обосновали принципиальную возможность разработки проблемно – ориентированных вычислителей примерно теми же, по порядку величины, силами и средствами, какими сегодня разрабатываются программы для традиционных процессоров. Но из принципиальной осуществимости изготовления микропроцессора, и даже из факта серийного выпуска микропроцессоров промышленностью, еще не следует, что у Вас на столе стоит системный блок с компьютером, оснащенным ОС Windows. Как конкретно все это выглядит, как используется изготовителями суперкомпьютеров, что можно купить в магазине и попытаться использовать самостоятельно? Ответам именно на эти вопросы посвящена данная глава. Надо сказать, что малая осведомленность современного программистского сообщества, особенно молодежи, в рассматриваемых вопросах, несколько удивляет. Масса молодых людей считает себя «разбирающимися в компьютерах», тратя свободное время на изучение того, какой драйвер к какому адаптеру жесткого диска лучше подходит, и как избежать перегрева процессора, «разогнав» его рабочую частоту на целых 10%, но при этом направив на материнскую плату вентилятор от старого пылесоса. Четверти этой интеллектуальной энергии, будь она израсходована «в мирных целях», хватило бы на разработку процессора с собственной системой команд, и – кто знает – может быть, лучшей в мире ОС для этого процессора. Конечно, готовая пиратская версия «стрелялки» на таком процессоре работать не будет – возможно, дело именно в этом, не знаю. Знаю лишь совершенно точно, что, когда довелось впервые рассказывать о технологиях программируемой логики студентам - программистам, их немало позабавила идея "скачать из Интернета пару-тройку свободно распространяемых процессоров для домашнего применения". К моменту чтения той лекции эта, по мнению слушателей, забавная идея давно уже стала реальностью. Чтобы в этом убедиться, достаточно открыть страницу «процессоры» на сайте opencores.org. Впрочем, вернемся к рассматриваемой теме. Со времени появления микросхем программируемой логики, выпускаемых массовыми тиражами, понимание специалистами возможностей их применения прошло три этапа. Сначала казалось, что микросхемы эти являются исключительно «современным вариантом макетной платы», то есть средством сократить и удешевить процесс разработки логики новых микросхем в условиях, когда ручной монтаж опытных образцов создаваемых схем стал невозможен или запредельно дорог. Вскоре применение микросхем программируемой логики в этом качестве дало такой толчок разработке всевозможных специализированных электронных устройств, что все больше стало появляться устройств заказных, не ориентированных на действительно крупносерийный выпуск. При разработке таких схем часто оказывалось, что изготовление их в виде «настоящих» пластин кремния после завершения разработки просто не оправдывает себя экономически. Например, в свое время вычислительные модули отечественного суперкомпьютера МВС-100 удалось сделать очень простыми и компактными, реализовав всю логику сопряжения двух процессоров и двух блоков оперативной памяти на единственной микросхеме программируемой логики. Программируемость полученного в итоге «чипсета» никак не использовалась в работе модуля, и даже представляла собой некоторую проблему, которую разработчики собирались ликвидировать, изготовив заказную микросхему на «обычной» пластине кремния. Однако, выяснилось, что изготовление таких «обычных» микросхем становилось экономически оправданным лишь при тиражности изделия хотя бы в несколько десятков тысяч экземпляров. При этом весь прогнозируемый объем выпуска модулей в рамках суперкомпьютерной программы МВС-100 оценивался в 100 – 200 штук максимум. В итоге необходимое количество модулей пришлось изготовить на базе микросхем программируемой логики. Не потому, что их предполагалось постоянно перепрограммировать в процессе работы, а просто потому, что объем выпуска оказался слишком мал, чтобы ради него запускать конвейер на заводе по производству «настоящих» микросхем. На этом этапе стало ясно, что технологии программируемой логики незаменимы в качестве средства изготовления (а не только проектирования) штучных и мелкосерийных цифровых электронных устройств. Третий этап понимания возможностей этой технологии связан с попытками разработки специализированных вычислителей. Попытки такие делались довольно давно, и часто оказывались удачными. Правда, речь шла обычно не о суперкомпьютерах общего назначения для вычислительных центров коллективного пользования, а о специализированных «машинах одной задачи», например, для обработки данных геофизической разведки полезных ископаемых. Методы такой специализированной обработки постоянно совершенствуются, и возможность периодически перепрограммировать «машину одной задачи», чтобы сделать ее «машиной еще одной задачи», стала рассматриваться как ценная сама по себе. В течение длительного времени специализированные вычислители на базе программируемой логики и универсальные компьютеры на стандартных процессорах существовали «в параллельных мирах». По ряду технических причин, которые мы рассмотрим ниже, только в самое последнее время программируемую логику начали вводить в состав суперкомпьютеров общего назначения, в качестве реконфигурируемых сопроцессоров, «помогающих» обычным процессорам. В настоящее время такие суперкомпьютеры выпускают Cray и Silicon Graphics. (для справок: и Cray, и Silicon Graphics были куплены Hewlett Packad Enterprise). Предполагается, что пользователь должен самостоятельно, возможно, с помощью сторонних фирм, спроектировать схему конкретного сопроцессора для взаимодействия со своей и только своей программой, которая выполняется на обычном процессоре. Теперь уже программируемость схемы сопроцессора – это не «досадная необходимость», как в предыдущем примере, а непременное условие его (сопроцессора) использования. Технологии построения коммуникационных систем архитектуры NUMA тоже, как мы знаем, первоначально применялись почти исключительно в изделиях Cray и Silicon Graphics (см. выше). Тем не менее, как мы уже показали выше, сегодня такие системы могут строиться с использованием недорогих, доступных кластерных технологий. Далее мы постараемся показать, что аналогичная судьба ожидает, и даже не завтра, а уже сегодня, реконфигурируемые сопроцессоры. К сожалению, нам также предстоит убедиться в том, что сложность применения таких систем, будь они изготовлены фирмой Cray (см. выше) на уникальном заводе, или же областным университетом в факультетской лаборатории кластерных технологий, неизмеримо выше, чем сложность их технической реализации «в металле». Впрочем, вернемся к нашим вентильным матрицам. Микросхемы программируемой логики выпускаются массовыми тиражами уже далеко не первый год. Ведущая роль в выпуске этих изделий принадлежит трем фирмам – Xilinx, Altera и Lattice. (Для справок: Xilix купили intel, Alterа – AMD, Lattice – живет и здравствует). Для конечного пользователя доступны инструментальные комплекты на базе таких микросхем, оформленные в виде плат расширения, которые устанавливают в стандартную материнскую плату. Дешевые варианты инструментальных плат могут не устанавливаться в материнскую плату, а подключаться стандартными кабелями через медленные каналы, такие, как USB или com-порт. Инструментальные платы выпускаются как разработчиками микросхем программируемой логики, так и многочисленными сторонними фирмами. цены на эту продукцию разнятся в очень широком диапазоне, от 3 – 4 тысяч рублей до тысяч долларов. Платы эти выпускаются массовыми тиражами и доступны для приобретения. Следует отметить, что рынок изделий программируемой логики во всем мире растет стремительно. Рост продаж микросхем за год на 150 - 200% на этом рынке считается нормальным, скромным результатом. Типичная инструментальная плата представляет собой «заготовку» для изготовления специализированной вычислительной системы. На такой плате, помимо собственно микросхемы программируемой логики, устанавливается некоторый объем оперативной памяти, и набор выходов на периферийные каналы различного физического и конструктивного формата. Например, разъем сетевого кабеля Ethernet с соответствующим приемопередатчиком физического уровня, разъем кабеля com-порта и т. п. Естественно, устанавливается один или несколько генераторов тактирующих импульсов, иногда – программируемой частоты. Из наших общих рассмотрений в предыдущей главе, на первый взгляд, следует, что в оперативной памяти микросхема программируемой логики не нуждается – ведь мы показали, как построить элемент памяти из вентилей. В действительности ситуация здесь та же, что и при использовании «настоящей» логики на серийно выпускаемой пластине кремния. Память в принципе может быть изготовлена из вентилей, но это очень дорого, и на практике так не поступают. При изготовлении компьютера традиционной архитектуры из вентилей делают лишь внутренние запоминающие элементы процессора. Нперативная память изготавливается из других, отличных от вентилей, элементов, в основе которых не транзисторы, а конденсаторы. Так же поступают и при построении специализированного вычислителя на программируемой логике, если в его составе предусмотрена оперативная память достаточно большого объема. Важно понимать, что наличие на плате того или иного периферийного разъема ни в коей мере не означает наличия в ее схеме готового устройства, подключаемого через этот разъем. Скажем, из наличия на плате разъема Ethernet ни в коей мере не следует, что где-то внутри платы имеется встроенный сетевой адаптер. Разъем комплектуется ровно тем объемом электроники, который необходим, чтобы перевести соответствующий сигнал в форму логического сигнала, пригодного для подачи на входы вентилей. Все остальное оборудование, например, внутренняя логика сетевого адаптера, логика шины PCI, к которой этот адаптер подключен, и даже логика процессора с той или иной системой команд, который управляет этой шиной – должно быть «изготовлено» разработчиком из вентилей, входящих в состав кристалла программируемой логики. Разработчик вовсе не обязан использовать разъем строго «по назначению». Например, в экспериментальном коммутаторе каналов PCI Express с логикой непрозрачного моста, в разработке которого принимал участие автор этого текста, разъемы формата SATA использовались для подключения коммутатора к кабельной линии связи с узлами, а разъемы Infiniband - для соединения модулей коммутатора между собой. Естественно, электрический «формат» сигнала должен соответствовать тому виду электроники, которым реально укомплектован разъем. В данном случае это соответствие соблюдалось. Инструментальные комплекты обязательно предусматривают тот или иной способ «холодного пуска», то есть возможность выполнить, по инициативе управляющего универсального компьютера, загрузку разработанной схемы в конфигурационную память кристалла программируемой логики, и ее запуск. Все дальнейшее схема должна делать сама. Если это схема процессора, вся «механика» уже его начального пуска должна быть предусмотрена разработчиком процессора в его схеме. Микросхемы программируемой логики отличаются друг от друга не только числом доступных логических элементов, но и видом самих этих элементов, а также разной степенью поддержки высокоскоростных каналов обмена с внешним миром. Микросхемы в точности того типа, который был описан в предыдущей главе, то есть построенные на базе вентилей «И», «ИЛИ», «НЕ», и оснащенные лишь сигнальными входами и выходами для подключения непосредственно к вентилям, исторически были первыми. Выпускаются они и сейчас. Сегодня это самые дешевые и скромные по своим возможностям микросхемы. Они называются CPLD (Complex Programmable Logic Device – Сложное устройство программируемой логики). Слово «сложное» в названии призвано подчеркнуть отличие от первых, совсем простых, вариантов вентильных матриц. Основным типом микросхем для разработки действительно сложных устройств на сегодня являются микросхемы FPGA (Field Programmable Gate Array – Программируемый «в поле» массив вентилей). Под программированием «в поле» имеется в виду возможность программирования вне завода, то есть не при изготовлении, а упоминание вентилей, в действительности, лишь дань традиции. Ёти микросхемы построены на низкоуровневом базисе, отличном от вентилей, но эквивалентном ему. Точнее – на базе так называемых функциональных генераторов, то есть элементов, реализующих таблично заданные функции алгебры логики от четырех (реже – шести) аргументов. Для проектировщика это различие в базисах большого значения не имеет, в чем мы убедимся ниже, при обзоре состава САПР. Важных отличий FPGA от более простых и дешевых кристаллов всего два. Во-первых, кристаллы FPGA почти всегда содержат в себе, наряду с универсальными логическими элементами, некоторое количество типовых логических узлов, реализованных непосредственно, на которые тратить универсальные логические элементы уже не требуется. Например, FPGA фирмы Xilinx (см. выше) имеют в своем составе готовые модули оперативной памяти с двумя независимыми портами и программируемой разрядностью слова, емкостью 18 Кбит, и в количестве до сотен штук на кристалл. Старшие модели также оснащаются готовыми процессорами с системой команд Power PC - до 4-х штук на кристалл, на изготовление которых также не надо тратить универсальные логические элементы. Другим примером типового логического узла может служит умножитель чисел с фиксированной точкой, которых в старших моделях FPGA также насчитываются сотни. Во-вторых, кристаллы FPGA различаются по степени оснащенности высокоскоростными линиями ввода-вывода, в частности, пригодными для реализации таких каналов, как PCI Express, Infiniband, Myrinet и Ethernet с частотой 1Гбит/с и более. В старших моделях FPGA фирмы Xilinx число таких линий достигает 24. В некоторых из них также имеется готовый адаптер PCI Express в виде типового логического узла. Инструментальные платы на базе кристаллов FPGA различаются, в первую очередь, своей оснащенностью периферийными разъемами. Скажем, на основе одной и той же микросхемы, оснащенной 24 высокоскоростными линиями передачи данных, могут быть изготовлены две различных инструментальных платы. На одной все эти линии будут выведены на внешние разъемы, а на другой – не будут, поскольку эта плата ориентирована на другой круг приложений, для которого используемый кристалл также годится. Конечно, при выборе платы для того или иного круга приложений имеет значение и оснащенность платы оперативной памятью. Вместе с инструментальной платой, конечно, поставляется версия САПР, как правило, разработки той же фирмы, что выпустила микросхему. Все САПР, используемые для проектирования на основе программируемой логики, обеспечивают электрическую корректность создаваемых схем, позволяя разработчику сосредоточиться исключительно на логическом уровне представления создаваемых изделий. Системы эти подразделяются на два больших класса. Системы первого класса позволяют разработчику проектировать схемы из типовых логических узлов, «в регистрах», то есть «рисовать» схему примерно так, как это делали разработчики прошлого. Конечно, вместо рисования карандашом на листе ватмана происходит построение схемы при помощи САПР в интерактивном режиме, но сам вид схемы на экране, да и способ ее восприятия при разработке и отладке, в принципе мало отличается от того, как это все выглядело во времена макетных плат и ручного монтажа. У автора нет опыта использования систем такого рода, но среди многих профессиональных схемотехников они пользуются большой популярностью. Системы второго класса подразумевают написание алгоритма, описывающего функционирование схемы, на специальном языке программирования. При такой работе деятельность разработчика уже внешне совсем не отличается от работы программиста. Трансляция текста на языке схемотехнического проектирования в схему «в регистрах» происходит автоматически, и разработчик вообще не имеет дело с графическим представлением схемы, подобно тому, как программист на С++ не интересуется процессорными командами, в которые его программа превращается при трансляции. В обеих технологиях на практике интенсивно используются готовые фрагменты схем - так называемые схемотехнические ядра, IP cores (Intellectual Property cores – ядра интеллектуальной собственности). Они выполняют при проектировании роль "стандартных функций". Например, в качестве такого ядра может быть оформлен контроллер памяти, системная шина процессора, или сам процессор. Создание схемотехнических ядер, способных работать не только в руках у автора, работа очень трудоемкая. Сложные схемотехнические ядра коммерческого качества тщательно шифруются, и стоят очень дорого. Например, цена однократной поставки качественно спроектированного ядра адаптера PCI Express может превосходить миллион рублей. Следует отметить, что постепенно в мировом сообществе разработчиков формируется инфраструктура обмена свободно распространяемыми исходными текстами схемотехнических ядер [54], подобно тому, как это давно и успешно происходит в мире традиционного программирования. В обеих упомянутых выше технологиях разработки изготовленная разработчиком схема транслируется в некоторое низкоуровневое представление «в регистрах», не предназначенное для непосредственного восприятия человеком – аналог «объектного модуля» в традиционном программировании. Базис такого представления, то есть конкретный набор логических элементов и типовых узлов, скрыт от разработчика, и не совпадает, вообще говоря, с базисом, физически реализованным в микросхеме программируемой логики. Таким же способом оформлены готовые схемотехнические ядра. Готовые логические узлы большой сложности, присутствующие в тех или иных конкретных микросхемах, для разработчика также представлены в виде схемотехнических ядер. Внутри такого «ядра» вместо «начинки» из универсальных логических элементов присутствует просто ссылка на логический узел определенного типа, характерный для конкретной модели FPGA. САПР объединяет «объектные модули», то есть ядра, в единую схему, и транслирует ее в конкретный, аппаратно реализованный, базис используемой микросхемы, гарантируя при этом электрическую корректность реализации. В результате получается загружаемый файл конфигурационной памяти микросхемы – аналог исполняемого файла программы в традиционном программировании. Этот загружаемый файл может быть загружен в микросхему при помощи оборудования, предусмотренного для этой цели на инструментальной плате. Таким образом, реконфигурируемый сопроцессор для использования в составе узла вычислительного кластера – это просто готовая инструментальная плата, которую достаточно приобрести и установить в материнскую плату вычислительного узла в качестве платы расширения. Проблем всего две – выбрать подходящую плату и научиться программировать ее должным образом. Обзору этих проблем посвящена следующая глава. |
|
||||||||||||||||||||||||||||||||
| Тел. +7(499)220-79-72; E-mail: inform@kiam.ru | ||||||||||||||||||||||||||||||||||