Аппаратное ускорение
Введение
В упрощенном сценарии задачи, которые выполняет компьютер, разбиваются на математические операции, которые выполняются центральным процессором компьютера. По этой причине ЦП должен быть рабочей лошадкой, которая хорошо справляется со всеми типами математических операций, чтобы все задачи получали хорошую производительность. Даже в компьютерах с несколькими ядрами в ЦП ядра по-прежнему являются «универсальными» и не оптимизированы для определенных сложных операций.
Большая часть этой работы выполняется в арифметико-логическом блоке (АЛУ). АЛУ — это то, что позволяет компьютеру складывать, вычитать и выполнять основные логические операции, такие как И/ИЛИ. Эти операции выполняются с использованием логических вентилей, и, комбинируя логические вентили интересным и сложным образом, ЦП может выполнять сложные вычисления. Однако, поскольку ЦП заранее не знает, какие операции ему отправляются, он должен сосредоточиться на предоставлении хороших строительных блоков, которые позволят выполнять практически любой тип вычислений.
Рисунок 1: Полная схема сумматора. Это то, что позволяет АЛУ складывать значения вместе.
Но можем ли мы сделать лучше? Что, если мы возьмем определенные задачи со сложными математическими операциями и вместо отправки операций в ЦП отправим их на какое-то специализированное оборудование, созданное специально для быстрого и эффективного выполнения этих операций? Это аппаратное ускорение. Хотя аппаратное ускорение может выполняться с помощью специализированных процессоров, таких как графический процессор, его также можно выполнять с помощью программируемых вентильных матриц (FPGA) для более специализированных сценариев.
Графический пример
Одним из наиболее распространенных примеров аппаратного ускорения являются графические процессоры или графические процессоры. Современные компьютеры выполняют огромное количество графических задач. От видеоконференций до игр и анимации, встроенной в ОС, высокая производительность зависит от больших возможностей обработки графики.
Графический процессор разработан специально для математических операций, необходимых для расширенных возможностей. Одна из этих расширенных возможностей, доступных в большинстве графических карт, называется сглаживанием. В этом контексте сглаживание сглаживает графику и делает изображение более реалистичным. Хотя это объяснение правильное, оно на самом деле не оправдывает сглаживания. В области цифровой обработки сигналов сглаживание является хорошо известным (и часто используемым) методом. Таким образом, несмотря на то, что GPU был разработан для обработки графики, мы могли использовать его для любой операции, требующей сглаживания.
Будем надеяться, что наш графический процессор поддерживает стандартные API, такие как OpenGL или Direct3d. Direct3d — это проприетарный API Microsoft, совместимый с операционными системами Windows (и XBox), а OpenGL — это открытый межъязыковой и кроссплатформенный API. Оба этих API раскрывают двумерные и трехмерные математические операции графических процессоров и позволяют разработчикам программного обеспечения легко использовать расширенные возможности. Если это так, то программист может использовать этот API для отправки операций сглаживания на графический процессор. Это ускорит не только нашу обработку графики, но и любую цифровую обработку сигналов.
Еще одним примером сложных математических операций, для которых оптимизирован графический процессор, являются уравнения Френеля. Уравнения Френеля описывают отражение света от различных поверхностей. Графические процессоры способны быстро и эффективно обрабатывать эти уравнения. Многие современные операционные системы, такие как OS-X и Windows 7, имеют отражение во всей ОС. На компьютерах с графическим процессором эти вычисления выполняются с аппаратным ускорением, что обеспечивает более высокую производительность и освобождает ЦП для выполнения других вычислений.
Рисунок 2: уравнения Френеля. Значительно сложнее, чем сложение.
Обычные выражения
Одной из областей аппаратного ускорения, представляющей особый интерес в сетевом контексте, является аппаратное ускорение для вычисления регулярных выражений. Обнаружение спама — это одна из областей, в которой регулярные выражения используются достаточно широко. Механизм обнаружения спама будет запускать множество правил (возможно, тысячи) для каждого входящего почтового сообщения, чтобы определить, является ли оно спамом или законным; большинство этих правил содержат регулярные выражения.
Регулярное выражение — это способ сопоставления строк текста. Они написаны со специальным синтаксисом, понятным компилятору. В нем есть символы, соответствующие подстановочным знакам, началу строки, концу строки и т. д. В контексте фильтрации спама, если вы хотите написать правило, согласно которому вся почта из любой учетной записи GMail считается спамом, вы можете написать что-нибудь например.*@gmail.com, где точка соответствует любому символу, а звездочка соответствует любому количеству символов. В качестве альтернативы, если вы хотите сопоставить любое электронное письмо, в котором есть буквы от A до H непосредственно перед символом @, вы можете написать что-то вроде.*[ah]@gmail.com, где квадратные скобки будут соответствовать любому символу, который соответствует тому, что находится в квадрате. скобки – в данном случае от a до h включительно.
Известно, что регулярные выражения довольно затратны в вычислительном отношении. При обнаружении спама, использующем множество регулярных выражений для каждого полученного почтового сообщения, вычислительные затраты огромны. Аппаратное ускорение может значительно ускорить вычисление этих регулярных выражений и освободить ЦП для других задач.
Сжатие
Другой областью аппаратного ускорения, представляющей особый интерес в контексте корпоративной сети, является аппаратное ускорение для сжатия данных. Для корпоративной сети более быстрое сжатие с помощью аппаратного ускорения может быть полезно в нескольких сценариях.
Во-первых, предположим, что у вас есть распределенная сеть, которая передает большие объемы данных через большие промежутки — возможно, у вас есть офис в Нью-Йорке и еще один в Лос-Анджелесе. Если вы передаете много данных, это может занять много времени или, возможно, довольно дорого. Сжатие позволит вам отправлять меньше данных, которые затем могут быть распакованы на принимающей стороне для формирования исходных данных. Это определенно уменьшит объем отправляемых данных, но также требует много времени для сжатия больших объемов данных. Специализированное оборудование, предназначенное для сжатия данных, позволит сэкономить значительное количество времени. При правильной настройке оборудования и приложений все это может происходить прозрачно для пользователя.
Во-вторых, если вы работаете в корпоративной сети, вам следует выполнять резервное копирование большей части данных в вашей сети. Это может занимать значительное количество места, и, хотя место для хранения относительно недорогое, всегда полезно использовать его по максимуму. Сжатие позволит вам хранить больше данных на том же объеме дискового пространства. Наличие аппаратного ускорения для частого сжатия и резервного копирования значительно повысит производительность.
Аппаратное ускорение становится все более популярным. Это похоже на то, как многоядерные процессоры становятся все более популярными. Я считаю, что по мере того, как число ядер в компьютере будет исчисляться десятками, мы увидим, что определенные ядра будут оптимизированы для специализированных сложных математических операций, подобных тем, которые я описал выше. С такими ядрами, присутствующими на компьютере, ОС затем распознает эти сложные операции и отправляет их на эти ядра, а не на «обычные» ядра. Это значительно повысит производительность (выше производительности, которую вы увидите с десятками ядер!). Это также добавит некоторые интересные опции при покупке компьютеров, поскольку некоторые из них могут иметь специализированные ядра для редактирования графики, игр, программирования и т. д. В идеале пользователь мог бы запросить, какие оптимизированные ядра будут в компьютере, чтобы настроить его. компьютер для своих конкретных потребностей.