ВЫБОР РЕДАКЦИИ

Перспективы развития микроконтроллеров с краевым искусственным интеллектом

Искусственный интеллект – перспективы развития

Наступление эры искусственного интеллекта реального масштаба времени

Искусственный интеллект и увеличение интереса к краевым вычислениям

Бесшовная связь – становой хребет Четвертой промышленной революции

Использование биометрии в Сухопутных войсках США

Вопросы развития краевых вычислений

Машинное обучение открывает новые возможности FPGA

Материалы Симпозиума SEMI по промышленной политике

Современное состояние и перспективы развития рынка САПР

Teraki совершает «квантовый скачок» в сфере больших данных

Бум стартапов во Франции

Материалы Симпозиума SEMI по промышленной политике

Вопросы развития краевых вычислений

Экономические аспекты развития технологий искусственного интеллекта

О перспективах рынка потребительской электроники

Средства искусственного интеллекта учатся распознавать звуки

Превосходство КНР в области искусственного интеллекта: правда или миф?

Некоторые проблемы развития памяти с высокой пропускной способностью

Новые тенденции использования машинного обучения при проектировании и обработке изображений

Проблемы разработки программно-управляемого аппаратного обеспечения

Проблемы разработки программно-управляемого аппаратного обеспечения

Выпуск 8 (6707) от 24 апреля 2020 г.
РУБРИКА: МИКРОЭЛЕКТРОНИКА

Традиционный подход к исполнению комплексного (многофункционального) ПО на процессорах типа x86 исчерпывает свои возможности с точки зрения многих приложений. Это обусловлено замедлением действия т. н. «закона Мура» при одновременном экспоненциальном росте сложности и масштаба программных приложений. В существующей среде программное и аппаратное обеспечение несоизмеримы из-за доминирования архитектуры x86. Появление аппаратных ускорителей изменило эти отношения таким образом, что теперь для написания эффективного ПО программист должен быть осведомлен о базовой аппаратной архитектуре.

В начале 2000-х гг. произошел всплеск интереса к программно-управляемому оборудованию, и такие компании, как Chameleon, Trimedia и ряд других, попытались стимулировать внедрение реконфигурируемых вычислительных подходов, обеспечивающих возможность быстрого изменения вычислительных процессов с целью их максимальной адаптации к конкретному приложению.

Сейчас разработчики, осваивая технологии искусственного интеллекта (ИИ), по сути, желают получить возможность достаточно быстро обновлять вычислительную часть сети в соответствии с определенными требованиями. В начале 2000-х гг. последствия прекращения действия многолетних тенденций, описываемых «законом Деннарда» («масштабирование Деннарда»), «законом Амдала» и т. п., были еще далеко не очевидны – ​в отличие от сегодняшней ситуации (см. рисунок). Теперь специалисты действительно готовы к тому, что им нужна проблемно-ориентированная архитектура, – осознание этого заняло у них всего 15 лет.


Обратная сторона проблемно-ориентированных архитектур

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



42 года процессорной обработки данных

* SPECint – компьютерная эталонная спецификация вычислительной мощности целочисленного процессора. Поддерживается корпорацией Standard Performance Evaluation (SPEC). Первый набор тестов SPEC–CPU92 – появился в 1992 г., за ним последовали CPU95, CPU2000 и CPU2006. Последний стандарт – CPU2017, состоящий из SPECspeed и SPECrate (он же SPECCPU_2017).

В противном случае большинство разработчиков снова возвращается к специализированным ИС и вентильным матрицам, программируемым пользователем (ASIC/FPGA). Реконфигурируемая часть системы обеспечивает целевую проблемно-ориентированную архитектуру, а затем, в ее рамках, предоставляет некоторую свободу маневра, позволяющую производить обновления. Это явное и интересное преимущество. Если требуется достаточная гибкость для реконфигурируемости, ее обеспечивает именно программно-управляемое аппаратное обеспечение. По всей видимости, ИИ станет стимулом продолжать движение к реконфигурируемости.

В случае сложных FPGA, таких как Versal корпорации Xilinx, – ​приборов с большим объемом ресурсов (блоки ИИ, процессоры, ЦОС-процессоры и т. д.) – ​разработчики создают ПО ИИ структурного уровня и используют цепочку инструментальных средств автоматической настройки оборудования, что позволяет оптимизировать прибор под конкретное ПО. Подобный подход очень перспективен, особенно при быстрой смене алгоритмов, как это происходит в случае ИИ и других перспективных приложений. Однако для того, чтобы «выжать» последние возможности из аппаратного обеспечения для повышения производительности, необходимы изменения на уровне языка регистровых передач (register transfer language, RTL), а также специалисты с опытом работы в этой области. Кроме того, любые изменения в RTL требуют тщательной повторной проверки с использованием по возможности достоверных формальных методов. Это подразумевает формальную проверку эквивалентности для подтверждения того, что FPGA способна реализовать предполагаемую функциональность.

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

Однако существует несколько способов достижения такого рода конфигурируемости. Хорошим примером могут служить универсальные (общего назначения) графические процессоры корпорации NVIDIA, работающие с использованием ее же платформы параллельных вычислений и модели программирования CUDA. На данный момент существует много различных типов аппаратных ускорителей, от FPGA до полноcтью заказных ASIC, таких как тензорный процессор корпорации Google (TPU1). Потребность в различных типах вычислений также распространилась на область встраиваемых «систем-на-кристалле» (SoC), где на одном кристалле интегрированы центральные процессоры, графические процессоры, ЦОС-процессоры, сетевые нейропроцессоры и т. д. Так возникает желаемая парадигма программно-управляемого аппаратного обеспечения, где ПО определяет аппаратное обеспечение, используемое для запуска программы.

Дальнейшим развитием этой парадигмы является, в частности, вариант программно-управляемой инфраструктуры аппаратного обеспечения (software-defined hardware infrastructure, SDHI), когда инфраструктура для эффективного запуска ПО выбирает из виртуально-интегрированного набора вычислительных процессоров правильные элементы. Для эффективной работы подобных аппаратных ускорителей необходима вычислительная платформа, позволяющая базовому программному языку эффективно использовать все доступные аппаратные средства (пример – ​популярная программная вычислительная платформа OpenCL2). 

Эта и другие подобные объектные структуры работают на двух основных типах аппаратных ускорителей: жестких базовых архитектурах аппаратного обеспечения – ​графических процессорах общего назначения или полностью заказных ASIC и FPGA, т. е. микросхемах с аппаратно реализованной программой (ИС с «зашитой» программой).

OpenCL предоставляет необходимые структуры, интерфейсы прикладного программирования (API) и ресурсы для выполнения базовых алгоритмов C-подобных языков на доступном оборудовании. Это важно, потому что за счет обеспечения параллельного выполнения задач как на однородных, так и на гетерогенных вычислительных ядрах можно достичь гораздо больших коэффициента использования и эффективности. Разница между универсальными графическими процессорами и FPGA заключается в том, что в случае FPGA ядра OpenCL отображаются с помощью инструментальных средств высокоуровневого синтеза (high-level synthesis, HLS) с аппаратными представлениями ядра, а не с выполнением ядра на базовом аппаратном ускорителе с жесткой архитектурой.

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

разработана платформа OpenCL с открытым исходным кодом, на основе которой могут быть скомпилированы и синтезированы реальные аппаратные проекты или топографированы существующие вычислительные архитектуры (например, графические процессоры);

созданы ядра CUDA, RT и Tensor, которые значительно сближают средства программирования с аппаратным обеспечением (хотя в данном случае эта аппаратная архитектура основана на графическом процессоре и фиксирована).

создана высокоуровневая модель программирования SYCL (для OpenCL) – ​открытый конкурент CUDA;

создан язык высокого уровня SystemC – ​один из вариантов языка С с временными метками;

создан высокоуровневый язык технических расчетов, интерактивная среда разработки алгоритмов и современный инструмент анализа данных – ​MatLab.

С помощью инструментальных средств HLS все аппаратное обеспечение в конечном счете определяется как программное обеспечение. Уровень абстракции – ​это то, что отличает один подход от другого. RTL (VHDL3или Verilog4) – ​это язык описания аппаратного обеспечения, широко используемый в полупроводниковой промышленности. RTL-компиляторы, инструментальные средства синтеза, размещения компонентов и формирования финальной топологии отображают RTL-код в файл топологического чертежа ИС физического уровня (GDSII5 или OASIS6). 

Как язык RTL работает совсем не так, как «программный» язык типа C. Главное отличие – ​в порядке выполнения. Язык C, как и многие другие языки программирования, выполняется последовательно, отражая основной способ работы центрального процессора. Язык RTL выполняет все строки кода одновременно, и проектировщик должен подробно закодировать другие правила порядка выполнения. Это означает, что обычно требуется кто-то с опытом проектирования аппаратного обеспечения, чтобы правильно понять и написать RTL-код. Написание RTL-кода – ​это долгий и трудоемкий процесс, и если бы поведенческие7 или алгоритмические модели можно было синтезировать в RTL-код, это позволило бы ускорить процесс проектирования. Именно для этого около 30 лет назад создавались инструменты HLS, но камнем преткновения при реализации данной идеи всегда было то, что повышение уровня абстракции часто приводит к снижению уровня оптимальности проектирования аппаратного обеспечения (т. н. штраф за абстракцию). Надо заметить, что поставщики FPGA предоставляют клиентам собственные инструменты реализации OpenCL, что позволяет использовать FPGA более широкому кругу разработчиков без углубленного опыта проектирования и кодирования на RTL.


Необходимость программно-управляемого аппаратного обеспечения

Термин «программно-управляемое аппаратное обеспечение» относится главным образом к применениям FPGA в качестве альтернативы дорогостоящей разработке прикладных специ-фических SoC. В более широком смысле он может быть использован для любой проблемно-ориентированной программируемой и конфигурируемой SoC, оптимизированной для выбранного набора применений. Таким образом, этот термин применим к общему принципу «форма следует за функцией» – ​в проектировании микросхем это означает, что функции определяют вычислительную архитектуру.

Программно-управляемое аппаратное обес-печение необходимо в тех случаях, когда универсальные центральные процессоры, графические процессоры или ЦОС-процессоры не обеспечивают необходимой производительности или вычислительной эффективности, а также когда выделенное аппаратное обеспечение не позволяет достичь необходимой гибкости. Популярные примеры – ​сложнофункциональные (СФ) блоки и SoC для ускорения искусственных нейронных сетей, которые требуют высокой гибкости для адаптации к быстро развивающимся графам нейронных сетей, а также наличия архитектур, подстроенных под требования пользователей в целях достижения необходимой производительности и энергоэффективности. В зависимости от требований целевого рынка это приводит к появлению различных программируемых и конфигурируемых компьютерных архитектур, начиная с универсальных центральных процессоров с векторными расширениями, оптимизированных графических процессоров, векторных ЦОС-процессоров, FPGA, процессоров со специализированными наборами команд и заканчивая трактами данных с программируемыми регистрами.

Важность программно-управляемого аппаратного обеспечения весьма высока. Вычислительные объектные структуры в определенной степени абстрагируют разработчика от базовой аппаратной архитектуры. Открытые вычислительные платформы, такие как SYCL, представляют собой следующий шаг в данном направлении, они позволяют более эффективно абстрагироваться от базового аппаратного обеспечения на уровне разработчика. Программа на OpenCL для графического процессора общего назначения определяет, как аппаратное обеспечение работает с определенным ядром. Написанная на OpenCL программа для FPGA фактически создает полностью заказное ускоренное ядро на основе FPGA. Если же написать на OpenCL программу для SoC, состоящую из центрального процессора, универсального графического процессора и специализированного ускорителя нейронной сети, она сможет обеспечить гетерогенные вычисления с максимальной эффективностью выполнения.


Программно-управляемое аппаратное обеспечение и искусственный интеллект

ИИ – ​это стремительно развивающаяся и эволюционирующая технология, поэтому любые продукты в этой области должны разрабатываться, проверяться, аттестоваться и выводиться на рынок очень быстро, иначе выгодный момент может быть упущен. Применение подхода на основе программно-управляемого аппаратного обеспечения к проектированию ASIC приводит к созданию аппаратной архитектуры нескольких типов с разным количеством вычислительных элементов. Некоторые из этих вычислительных элементов будут более универсальными, другие – ​более специализированными на конкретных функциях, а их сочетание обеспечит наилучшую гибкость при разработке программных алгоритмов и приложений как сейчас, так и в будущем. Таким образом обеспечивается определенная степень защиты, достаточная, чтобы переждать бурную эволюцию ИИ до появления следующего поколения ASIC.

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

Кроме того, неоспоримым преимуществом программно-управляемого аппаратного обеспечения становится возможность значительно повысить производительность и вычислительную эффективность. Например, версия 1 (2015 г.) TPU корпорации Google работает с глубокими нейронными сетями в 15–30 раз быстрее и в 30–80 раз эффективнее, чем современные центральные и графические процессоры, реализованные по аналогичным технологиям. ИИ действительно стал «захватчиком рынка»8 для проблемно-ориентированных архитектур – ​в том смысле, что он обеспечивает возможность высокого параллелизма, позволяющего в полной мере использовать индивидуальные ресурсы обработки. В итоге сейчас мы наблюдаем новый «золотой век» компьютерной архитектуры, стимулирующий начало реализации сотен новых проектов по проектированию ИС в области, где до этого их число постоянно сокращалось.

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

Есть и другие сходные проблемы. Например, нейронные сети гораздо лучше подходят для расширенного описания на языке C++, чем большинство других объектов, потому что это асинхронные сети небольших процессов, соответствующие вычислительной парадигме «взаимодействующие последовательные процессы» (communication sequential processes, CSP9). 

Эта парадигма существует с 1970-х гг., но никогда не была реализована достаточно хорошо. Одна из проблем с множеством компромиссов между аппаратным и программным обеспечением при согласовании скоростей передачи данных заключается в том, что создать язык, который понравится пользователям, нелегко, а программисты не собираются разрабатывать на каждый случай новые языки типа Verilog или SystemVerilog. Это дорого и очень трудоемко.

Тем не менее ряд специалистов считает, что если бы некоторые концепции в языке C++ были расширены для поддержки части функционала языков описания оборудования, наряду с управляемыми событиями командами и каналами передачи данных, возможно, инженерное сообщество могло бы их использовать.


Другие инструментальные средства и подходы

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

Идея состоит в том, чтобы создать высокоуровневую имитационную модель, позволяющую анализировать соотношение потребляемой мощности и производительности рабочих нагрузок приложений, преобразований компиляторов и аппаратных ресурсов. Цель – ​формулирование оптимальной спецификации для групп реализации и внедрения аппаратного и программного обеспечения. Сокращение времени вывода новой продукции на такие высококонкурентные рынки, как проектирование SoC с ИИ, вполне возможно с использованием виртуального прототипирования. Оно позволяет ускорить разработку встраиваемого ПО и компиляторов. Здесь имитационная модель служит виртуальной мишенью для предварительной (pre-silicon10) аттестации и оптимизации компилятора, ранней разработки программно-аппаратных средств (микропрограммное обеспечение) и драйверов, а также ранней интеграции ускорителей ИИ в хост-программные стеки, работающие на хост-центральном процессоре.


Заключение

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

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


Mutschler Ann Steffora. Software-Defined Hardware Gains Ground – ​Again. Semiconductor Engineering, March 26, 2020: https://semiengineering.com/software-defined-hardware-gains-ground-again/

ЧИТАЙТЕ ТАКЖЕ

Выпуск 24/25 (6748/6749) от 23 декабря 2021 г. г.
Выпуск 24/25 (6748/6749) от 23 декабря 2021 г. г.