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