В вычислениях, аппаратное ускорение - это использование компьютерного оборудования, специально созданного для выполнения некоторых функций более эффективно, чем это возможно в программном обеспечении работает на универсальном центральном процессоре (CPU). Любое преобразование из данных или подпрограммы, которое может быть вычислено, может быть вычислено исключительно в программном обеспечении, запущенном на общий ЦП, исключительно в изготовленном на заказ аппаратном обеспечении или в некотором сочетании того и другого. Операция может быть вычислена быстрее в специализированном оборудовании, разработанном или запрограммированном для вычисления операции, чем указано в программном обеспечении, и выполняется на универсальном компьютерном процессоре. У каждого подхода есть свои преимущества и недостатки. Реализация вычислительных задач на оборудовании для уменьшения задержки и увеличения пропускной способности известна как аппаратное ускорение.
Типичные преимущества программного обеспечения включают более быструю разработку (что приводит к более быстрому выходу на рынок ), более низкие единовременные затраты на разработку, повышенные переносимость и простота обновления функций или исправления ошибок за счет накладных расходов на вычислений общие операции. Преимущества оборудования включают ускорение, снижение энергопотребления, меньшую задержку, повышенный параллелизм и пропускную способность, а также лучшее использование площади и функциональных компонентов, доступных на интегральной схеме ; ценой меньшей возможности обновлять конструкции после выгравирования на кремнии и более высокой стоимости функциональной проверки и времени вывода на рынок. В иерархии цифровых вычислительных систем, от процессоров общего назначения до полностью настраиваемого аппаратного обеспечения, существует компромисс между гибкостью и эффективностью, при этом эффективность увеличивается на порядков, когда любое конкретное приложение реализуется выше по этой иерархии. Эта иерархия включает процессоры общего назначения, такие как ЦП, более специализированные процессоры, такие как графические процессоры, фиксированные функции, реализованные на программируемых пользователем вентильных массивах (ПЛИС), и фиксированная функция, реализованная на специализированной интегральной схеме (ASIC).
Аппаратное ускорение выгодно для производительности и практично, когда функции фиксированы, поэтому обновления не так необходимы, как в программных решениях. С появлением перепрограммируемых логических устройств, таких как ПЛИС, ограничение аппаратного ускорения полностью фиксированными алгоритмами с 2010 года ослабло, что позволяет применять аппаратное ускорение к проблемным областям, требующим модификации алгоритмов. и обработка поток управления.
Интегральные схемы могут быть созданы для выполнения произвольных операций с аналоговым и цифровым сигналов. Чаще всего в вычислительной технике сигналы являются цифровыми и могут быть интерпретированы как двоичное число данные. Компьютерные аппаратные средства и программное обеспечение оперируют информацией в двоичном представлении для выполнения вычислений ; это достигается путем вычисления булевых функций на битах ввода и вывода результата на некоторое устройство вывода ниже по потоку для хранилища или дальнейшая обработка.
Программное или аппаратное обеспечение может вычислить любую вычислимую функцию. Специальное оборудование обеспечивает более высокую производительность на ватт для тех же функций, которые могут быть указаны в программном обеспечении. Языки описания оборудования (HDL), такие как Verilog и VHDL, могут моделировать ту же семантику, что и программное обеспечение, и синтезировать проект в список соединений, который может быть запрограммирован на FPGA или скомпонован в логические элементы специализированной интегральной схемы.
Подавляющее большинство программных вычислений происходит на машинах, реализующих архитектуру фон Неймана, вместе известных как компьютеры с хранимыми программами. Компьютерные программы хранятся в виде данных и выполняются процессорами, обычно одним или несколькими ядрами ЦП. Такие процессоры должны получать и декодировать инструкции , а также операнды данных из памяти как часть цикла команд. для выполнения инструкций, составляющих программу. Использование общего кэша для кода и данных ведет к узкому месту фон Неймана, фундаментальному ограничению пропускной способности программного обеспечения на процессорах, реализующих архитектуру фон Неймана. Даже в модифицированной гарвардской архитектуре, где инструкции и данные имеют отдельные кеши в иерархии памяти, есть накладные расходы для инструкции декодирования коды операций и мультиплексирование доступные исполнительные блоки на микропроцессоре или микроконтроллере, что приводит к низкому коэффициенту использования цепи. Технология Intel Hyper-Threading обеспечивает одновременную многопоточность за счет использования недостаточного использования доступных функциональных блоков процессора и параллелизма на уровне команд между различными аппаратные потоки.
Аппаратные исполнительные блоки, как правило, не полагаются на архитектуру фон Неймана или модифицированную гарвардскую архитектуру и не нуждаются в выполнении выборки и декодирования инструкций шаги цикла команд и несут накладные расходы этих этапов. Если необходимые вычисления указаны в конструкции оборудования уровня передачи регистров (RTL), время и затраты на площадь схемы, которые будут понесены на этапах выборки команд и декодирования, могут быть восстановлены и использованы для других целей.
Это восстановление экономит время, мощность и площадь схемы при вычислениях. Освободившиеся ресурсы можно использовать для увеличения числа параллельных вычислений, других функций, обмена данными или памяти, а также для расширения возможностей ввода / вывода. Это происходит за счет альтернативных издержек менее универсальных услуг.
Более широкая настройка аппаратных средств RTL позволяет создавать новые архитектуры, такие как вычисления в памяти, архитектуры, запускаемые транспортом (TTA) и сети на кристалле (NoC) для получения дополнительных преимуществ от увеличенной локальности данных для контекста выполнения, тем самым уменьшая вычислительные ресурсы и задержку связи между модулями и функциональные блоки.
Специальное оборудование ограничено в возможностях параллельной обработки только областью и логическими блоками, доступными на кристалле интегральной схемы. Следовательно, аппаратное обеспечение гораздо более свободно предлагает массовый параллелизм, чем программное обеспечение на процессорах общего назначения, предлагая возможность реализации модели параллельной машины с произвольным доступом (PRAM).
Обычно многоядерные и многоядерные процессоры строятся из схем IP-ядра микропроцессора на одной FPGA или ASIC. Точно так же специализированные функциональные блоки могут быть составлены параллельно как при цифровой обработке сигналов без встраивания в процессор IP-ядро. Следовательно, аппаратное ускорение часто используется для повторяющихся фиксированных задач, требующих небольшого условного перехода, особенно для больших объемов данных. Вот как реализована линия Nvidia CUDA из GPU.
По мере роста мобильности устройств относительная производительность конкретных протоколов ускорения потребовала новых показателей, учитывая такие характеристики, как физические размеры оборудования, энергопотребление и пропускная способность операций. Их можно разделить на три категории: эффективность задачи, эффективность реализации и гибкость. Соответствующие метрики учитывают площадь оборудования вместе с соответствующей производительностью операций и потребляемой энергией.
#includeint main (void) {int arrayOne = {1, 2, 3}; int arrayTwo = {4, 5, 6}; int arraySum [3]; for (int i = 0; i < 3; i++) { arraySum[i] = arrayOne[i] + arrayTwo[i]; } }
Предположим, мы хотим вычислить сумму целые числа. Предполагая, что большие целые числа доступны как bignum
достаточно большие для хранения суммы, это можно сделать в программном обеспечении, указав ( здесь, в C ++ ):
constexpr int N = 20; constexpr int two_to_the_N = 1 << N; bignum array_sum(const std::arrayints) {bignum result = 0; for (std :: size_t i = 0; i < two_to_the_N; i++) { result += ints[i]; } return result; }
Этот алгоритм работает за линейное время, в нотации Big O. В аппаратных средствах с достаточной площадью на микросхеме вычисления могут быть распараллелены так, чтобы они занимали всего 20 временных шагов используя алгоритм суммы префикса. Алгоритму требуется только логарифмическое время, и пробел как алгоритм на месте :
параметр int N = 20; параметр int two_to_the_N = 1 << N; function int array_sum; input int array[two_to_the_N]; begin for (genvar i = 0; i < N; i++) begin for (genvar j = 0; j < two_to_the_N; j++) begin if (j>= (1 << i)) begin array[j] = array[j] + array[j - (1 << i)]; end end end return array[two_to_the_N - 1]; end endfunction
В этом примере используются преимущества больших параллельных ресурсов, доступных в аппаратном обеспечении для конкретных приложений, чем в большинстве программных и универсальных вычислительные парадигмы и архитектуры.
Аппаратное ускорение может применяться к потоковой обработке.
Примеры аппаратного ускорения включают бит bli t функциональность ускорения в графических процессорах (GPU), использование мемристоров для ускорения нейронных сетей и регулярное выражение аппаратное ускорение для контроля спама в отрасли серверов, предназначенных для предотвращения атак отказа в обслуживании (ReDoS) с использованием регулярных выражений. Аппаратное обеспечение, выполняющее ускорение, может быть частью ЦП общего назначения или отдельным блоком. Во втором случае он упоминается как аппаратный ускоритель или, более конкретно, как 3D-ускоритель, криптографический ускоритель и т. Д.
Традиционно процессоры были последовательными (инструкции выполняются одна за другой) и были разработаны для выполнения алгоритмов общего назначения, управляемых выборкой инструкций (например, перемещение временные результаты в и из в регистровый файл ). Аппаратные ускорители улучшают выполнение определенного алгоритма, обеспечивая более высокий параллелизм, имея определенные пути данных для их временных переменных и уменьшая накладные расходы на управление инструкциями в цикл выборки-декодирования-выполнения.
Современные процессоры являются многоядерными и часто имеют параллельные блоки «одна инструкция; несколько данных» (SIMD ). Даже в этом случае аппаратное ускорение по-прежнему дает преимущества. Аппаратное ускорение подходит для любого алгоритма с интенсивными вычислениями, который часто выполняется в задаче или программе. В зависимости от степени детализации аппаратное ускорение может варьироваться от небольшого функционального блока до большого функционального блока (например, оценка движения в MPEG-2 ).
Приложение | Аппаратный ускоритель | Акроним |
---|---|---|
Компьютерная графика
| Графический процессор | GPU
|
Цифровая обработка сигналов | Цифровой сигнальный процессор | DSP |
Обработка аналоговых сигналов | Аналоговая матрица, программируемая на месте | FPAA
|
Обработка звука | Звуковая карта и микшер звуковой карты | Н / Д |
Компьютерная сеть | Сетевой процессор и контроллер сетевого интерфейса | NPU и NIC
|
Криптография | Криптографический ускоритель и безопасный криптопроцессор | N / A |
Искусственный интеллект | AI-ускоритель | Н / Д
|
Полилинейная алгебра | Блок тензорной обработки | TPU |
Физическое моделирование | Блок обработки физики | PPU |
Регулярные выражения | Сопроцессор регулярных выражений | Н / Д |
Сжатие данных | Ускоритель сжатия данных | Н / A |
Обработка в памяти | Сеть на микросхеме и Систолический массив | NoC; Не применимо |
Любая вычислительная задача | Компьютерное оборудование | HW (иногда)
|