Аппаратное ускорение — это использование компьютерного оборудования , предназначенного для более эффективного выполнения определенных функций по сравнению с программным обеспечением , работающим на центральном процессоре (ЦП) общего назначения . Любое преобразование данных , которое можно рассчитать с помощью программного обеспечения, работающего на обычном ЦП, также можно рассчитать с помощью специально изготовленного оборудования или с помощью того и другого.
Чтобы более эффективно выполнять вычислительные задачи, обычно можно инвестировать время и деньги в улучшение программного обеспечения, улучшение оборудования или и то, и другое. Существуют различные подходы с преимуществами и недостатками с точки зрения уменьшения задержки , увеличения пропускной способности и снижения энергопотребления . Типичные преимущества сосредоточения внимания на программном обеспечении могут включать большую универсальность, более быструю разработку , более низкие единовременные затраты на проектирование, повышенную переносимость и простоту обновления функций или исправления ошибок за счет накладных расходов на вычисление общих операций. Преимущества сосредоточения внимания на аппаратном обеспечении могут включать ускорение , снижение энергопотребления , [1] меньшую задержку, увеличение параллелизма [2] и пропускной способности , а также лучшее использование площади и функциональных компонентов , доступных на интегральной схеме ; ценой более низкой возможности обновлять конструкции после того, как они были выгравированы на кремнии , а также более высоких затрат на функциональную проверку , времени выхода на рынок и потребности в большем количестве деталей. В иерархии цифровых вычислительных систем, от процессоров общего назначения до полностью настраиваемого оборудования, существует компромисс между гибкостью и эффективностью, при этом эффективность возрастает на порядки , когда какое-либо конкретное приложение реализуется выше в этой иерархии. [3] Эта иерархия включает процессоры общего назначения, такие как ЦП, [4] более специализированные процессоры, такие как программируемые шейдеры в графическом процессоре , [5] фиксированные функции , реализованные на программируемых пользователем вентильных матрицах (FPGA), [6] и фиксированные -функция, реализованная на специализированных интегральных схемах (ASIC). [7]
Аппаратное ускорение выгодно для производительности и практично, когда функции фиксированы, поэтому обновления не так необходимы, как в программных решениях. С появлением перепрограммируемых логических устройств , таких как FPGA, ограничение аппаратного ускорения полностью фиксированными алгоритмами с 2010 года ослабло, что позволяет применять аппаратное ускорение к проблемным областям, требующим модификации алгоритмов и потока управления обработкой . [8] [9] Однако недостатком является то, что во многих проектах с открытым исходным кодом требуются проприетарные библиотеки, которые не все поставщики стремятся распространять или предоставлять, что затрудняет интеграцию в такие проекты.
Интегральные схемы могут быть созданы для выполнения произвольных операций с аналоговыми и цифровыми сигналами. Чаще всего в вычислениях сигналы являются цифровыми и могут интерпретироваться как двоичные числовые данные. Компьютерное оборудование и программное обеспечение работают с информацией в двоичном представлении для выполнения вычислений ; это достигается путем вычисления логических функций на входных битах и вывода результата на какое-либо устройство вывода для хранения или дальнейшей обработки .
Поскольку все машины Тьюринга могут выполнять любую вычислимую функцию , всегда можно создать собственное оборудование, выполняющее ту же функцию, что и данная часть программного обеспечения. И наоборот, программное обеспечение всегда можно использовать для эмуляции функций данного оборудования. Специальное оборудование может обеспечивать более высокую производительность на ватт для тех же функций, которые можно указать в программном обеспечении. Языки описания оборудования (HDL), такие как Verilog и VHDL , могут моделировать ту же семантику , что и программное обеспечение, и синтезировать проект в список соединений , который можно запрограммировать на FPGA или включить в логические элементы ASIC.
Подавляющее большинство программных вычислений происходит на машинах, реализующих архитектуру фон Неймана , известных под общим названием компьютеры с хранимыми программами . Компьютерные программы хранятся в виде данных и выполняются процессорами . Такие процессоры должны получать и декодировать инструкции, а также загружать операнды данных из памяти (как часть цикла команд ) для выполнения инструкций, составляющих программу. Использование общего кэша для кода и данных приводит к «узкому фон Нейману», фундаментальному ограничению пропускной способности программного обеспечения на процессорах, реализующих архитектуру фон Неймана. Даже в модифицированной гарвардской архитектуре , где инструкции и данные имеют отдельные кэши в иерархии памяти , существуют накладные расходы на декодирование кодов операций инструкций и мультиплексирование доступных исполнительных блоков на микропроцессоре или микроконтроллере , что приводит к низкому использованию схемы. Современные процессоры, обеспечивающие одновременную многопоточность , используют недостаточное использование доступных функциональных блоков процессора и параллелизм на уровне команд между различными аппаратными потоками.
Аппаратные исполнительные блоки обычно не полагаются на архитектуру фон Неймана или модифицированную Гарвардскую архитектуру и не нуждаются в выполнении этапов выборки и декодирования инструкций в цикле команд и несут накладные расходы на этих этапах. Если необходимые вычисления указаны в аппаратном обеспечении уровня передачи регистров (RTL), затраты времени и площади схемы, которые могут возникнуть на этапах выборки команд и декодирования, могут быть возвращены и использованы для других целей.
Такое восстановление экономит время, мощность и площадь схемы при вычислениях. Освобожденные ресурсы можно использовать для увеличения параллельных вычислений, других функций, связи или памяти, а также для увеличения возможностей ввода/вывода . Это достигается за счет полезности общего назначения.
Более широкая настройка аппаратных средств с помощью RTL позволяет новым архитектурам, таким как вычисления в памяти, архитектуры , управляемые транспортом (TTA) и сети на кристалле (NoC), получить дополнительную выгоду от повышенной локальности данных в контексте выполнения, тем самым уменьшая задержку вычислений и связи между модули и функциональные блоки.
Возможности специального аппаратного обеспечения ограничены только площадью и логическими блоками , доступными на кристалле интегральной схемы . [10] Таким образом, аппаратное обеспечение гораздо более свободно обеспечивает массовый параллелизм , чем программное обеспечение на процессорах общего назначения, предлагая возможность реализации модели параллельной машины с произвольным доступом (PRAM).
Обычно многоядерные и многоядерные процессоры создаются на основе схем IP-ядра микропроцессора на одной FPGA или ASIC. [11] [12] [13] [14] [15] Аналогичным образом, специализированные функциональные блоки могут быть составлены параллельно, как при цифровой обработке сигналов, без внедрения в IP-ядро процессора . Поэтому аппаратное ускорение часто используется для повторяющихся фиксированных задач, требующих небольшого условного ветвления , особенно для больших объемов данных. Именно так реализована линейка графических процессоров Nvidia CUDA .
По мере роста мобильности устройств были разработаны новые показатели, которые измеряют относительную производительность конкретных протоколов ускорения с учетом таких характеристик, как размеры физического оборудования, энергопотребление и пропускная способность операций. Их можно свести к трем категориям: эффективность выполнения задач, эффективность реализации и гибкость. Соответствующие показатели учитывают площадь оборудования, а также соответствующую производительность операций и потребляемую энергию. [16]
Примеры аппаратного ускорения включают функцию побитового ускорения в графических процессорах (GPU), использование мемристоров для ускорения нейронных сетей и аппаратное ускорение регулярных выражений для контроля спама в серверной отрасли, предназначенное для предотвращения атак типа «отказ в обслуживании» с использованием регулярных выражений (ReDoS). [17] Аппаратное обеспечение, выполняющее ускорение, может быть частью ЦП общего назначения или отдельным блоком, называемым аппаратным ускорителем, хотя обычно их называют более конкретным термином, например, 3D-ускорителем или криптографическим ускорителем .
Традиционно процессоры были последовательными (инструкции выполнялись одна за другой) и были разработаны для выполнения алгоритмов общего назначения, управляемых выборкой инструкций (например, перемещение временных результатов в файл регистров и из него ) . Аппаратные ускорители улучшают выполнение определенного алгоритма, обеспечивая больший параллелизм , имея определенные пути данных для их временных переменных и уменьшая накладные расходы на управление инструкциями в цикле выборка-декодирование-выполнение.
Современные процессоры являются многоядерными и часто имеют параллельные блоки «одна инструкция; несколько данных» ( SIMD ). Несмотря на это, аппаратное ускорение по-прежнему дает преимущества. Аппаратное ускорение подходит для любого алгоритма с интенсивными вычислениями, который часто выполняется в задаче или программе. В зависимости от степени детализации аппаратное ускорение может варьироваться от небольшого функционального блока до большого функционального блока (например, оценки движения в MPEG-2 ).
Аппаратное моделирование на FPGA повысило производительность цифрового фильтра.