하드웨어 가속

[섬네일|[암호화 가속기 카드를 사용하면 암호화 작업을 더 빠른 속도로 수행할 수 있다.]]

**하드웨어 가속**(hardware acceleration)은 범용 중앙 처리 장치(CPU)에서 실행되는 소프트웨어와 비교하여 특정 기능을 보다 효율적으로 수행하도록 설계된 컴퓨터 하드웨어를 사용하는 것이다. 일반 CPU에서 실행되는 소프트웨어로 계산할 수 있는 데이터의 변환은 맞춤 제작된 하드웨어 또는 둘의 일부 조합으로도 계산할 수 있다.

컴퓨팅 작업을 더 효율적으로 수행하려면 일반적으로 소프트웨어 개선, 하드웨어 개선 또는 둘 다에 시간과 비용을 투자할 수 있다. 지연 시간 감소, 처리량 증가, 에너지 소비 감소 측면에서 장단점이 있는 다양한 접근 방식이 있다. 소프트웨어에 중점을 두는 것의 일반적인 장점은 다용성 향상, 보다 빠른 개발, 낮은 초기 개발비, 향상된 이식성, 기능 업데이트 또는 소프트웨어 버그 패치의 용이성 등을 포함할 수 있으며, 이는 일반적인 작업을 계산하는 오버헤드를 대가로 한다. 하드웨어에 중점을 두는 것의 장점은 스피드업, 전력 소비 감소, 낮은 레이턴시, 병렬성 및 대역폭 증가, 집적 회로에서 사용 가능한 영역 및 기능 구성 요소의 더 나은 활용을 포함할 수 있으며, 이는 실리콘에 식각된 후 설계 업데이트 능력 감소와 기능 검증 비용 증가, 시장 출시 시간, 더 많은 부품의 필요성을 대가로 한다. 범용 프로세서에서 완전히 맞춤화된 하드웨어에 이르는 디지털 컴퓨팅 시스템의 계층 구조에서는 유연성과 효율성 사이에 상충 관계가 있으며, 주어진 애플리케이션이 해당 계층 구조의 상위에서 구현될 때 효율성은 몇 배로 증가한다. 이 계층 구조에는 CPU와 같은 범용 프로세서, GPU의 프로그래밍 가능한 셰이더와 같은 보다 전문화된 프로세서, FPGA에 구현된 애플리케이션, 및 ASIC에 구현된 고정 기능이 포함된다.

하드웨어 가속은 성능에 유리하며, 소프트웨어 솔루션만큼 업데이트가 필요하지 않은 고정된 기능에 실용적이다. FPGA와 같은 재프로그래밍 가능한 논리 장치의 등장으로 하드웨어 가속을 완전히 고정된 알고리즘에 적용하는 제한이 2010년부터 완화되어, 알고리즘 및 처리 제어 흐름의 수정이 필요한 문제 영역에도 하드웨어 가속을 적용할 수 있게 되었다. 그러나 단점은 많은 오픈 소스 프로젝트에서 모든 공급업체가 배포하거나 공개하기를 꺼려하는 독점 라이브러리가 필요하여 이러한 프로젝트에 통합하기 어렵다는 점이다.

## 개요
집적 회로는 아날로그 및 디지털 신호 모두에서 다양한 작업을 처리하도록 설계되었다. 컴퓨팅에서 디지털 신호는 가장 일반적이며 일반적으로 이진수로 표현된다. 컴퓨터 하드웨어와 소프트웨어는 이 이진 표현을 사용하여 계산을 수행한다. 이는 이진 입력에 대해 불 함수를 처리한 다음, 저장 또는 다른 장치에 의한 추가 처리를 위해 결과를 출력함으로써 이루어진다.

### 하드웨어와 소프트웨어의 계산 동등성
모든 튜링 기계는 어떤 계산 가능 함수든 실행할 수 있으므로, 주어진 소프트웨어와 동일한 기능을 수행하는 맞춤형 하드웨어를 설계하는 것이 항상 가능하다. 반대로, 소프트웨어는 항상 주어진 하드웨어의 기능을 에뮬레이트하는 데 사용될 수 있다. 맞춤형 하드웨어는 소프트웨어로 지정할 수 있는 동일한 기능에 대해 더 높은 전력당 성능을 제공할 수 있다. 하드웨어 기술 언어(HDL)인 베릴로그 및 VHDL은 소프트웨어와 동일한 의미론을 모델링하고, 설계를 FPGA에 프로그래밍하거나 ASIC의 논리 회로로 구성할 수 있는 넷리스트로 합성할 수 있다.

### 프로그램 내장식 컴퓨터
대부분의 소프트웨어 기반 컴퓨팅은 폰 노이만 구조를 구현하는 기계에서 발생하며, 이를 총칭하여 프로그램 내장식 컴퓨터라고 한다. 컴퓨터 프로그램은 데이터로 저장되고 실행된다. 이러한 프로세서는 소프트웨어 프로그램을 구성하는 명령어를 실행하기 위해 명령어를 가져오고 디코딩하며, 컴퓨터 메모리에서 데이터 피연산자를 로드해야 한다(명령 주기의 일부). 코드와 데이터에 공통 CPU 캐시에 의존하는 것은 폰 노이만 아키텍처를 구현하는 프로세서에서 소프트웨어 처리량의 근본적인 한계인 "폰 노이만 병목 현상"을 초래한다. 수정된 하버드 아키텍처에서도 명령어와 데이터가 메모리 계층 구조에 별도의 캐시를 가지고 있지만, 명령어 명령 코드를 디코딩하고 마이크로프로세서 또는 마이크로컨트롤러에서 사용 가능한 실행 장치를 멀티플렉싱하는 데 오버헤드가 발생하여 회로 활용률이 낮아진다. 동시 멀티스레딩을 제공하는 최신 프로세서는 사용 가능한 프로세서 기능 장치의 활용률 부족과 다른 하드웨어 스레드 간의 명령어 수준 병렬성을 활용한다.

### 하드웨어 실행 장치
하드웨어 실행 장치는 일반적으로 폰 노이만 또는 수정된 하버드 아키텍처에 의존하지 않으며 명령 주기의 명령어 가져오기 및 디코딩 단계를 수행하고 해당 단계의 오버헤드를 발생시킬 필요가 없다. 필요한 계산이 레지스터 전송 수준(RTL) 하드웨어 설계로 지정된 경우, 명령어 가져오기 및 디코딩 단계로 인해 발생할 시간 및 회로 영역 비용을 회수하여 다른 용도로 사용할 수 있다.

이러한 회수는 계산에서 시간, 전력 및 회로 영역을 절약한다. 회수된 리소스는 병렬 계산 증가, 다른 기능, 통신 또는 메모리, 그리고 입출력 기능 증가에 사용될 수 있다. 이는 범용 유틸리티 비용이 발생한다.

### 새로운 하드웨어 아키텍처
하드웨어 설계에 대한 RTL 사용자 정의를 높이면 인메모리 컴퓨팅, 트랜스포트 트리거드 아키텍처(TTA), 칩 상의 네트워크(NoC)와 같은 새로운 아키텍처가 실행 컨텍스트에 대한 데이터의 국부성 증가로부터 추가적인 이점을 얻어 모듈과 기능 단위 간의 컴퓨팅 및 통신 지연 시간을 줄일 수 있다.

맞춤형 하드웨어는 집적 회로 다이에서 사용 가능한 영역과 논리 블록에 의해서만 병렬 처리 능력이 제한된다. 따라서 하드웨어는 범용 프로세서의 소프트웨어보다 대규모 병렬성을 제공하는 데 훨씬 자유로우며, 병렬 랜덤 접근 머신(PRAM) 모델을 구현할 가능성을 제공한다.

단일 FPGA 또는 ASIC에 마이크로프로세서 IP 코어 회로도로 멀티 코어 및 매니코어 처리 장치를 구축하는 것이 일반적이다. 마찬가지로, 특수 기능 장치는 프로세서 IP 코어에 내장되지 않고도 디지털 신호 처리에서와 같이 병렬로 구성될 수 있다. 따라서 하드웨어 가속은 특히 많은 양의 데이터에 대해 조건 분기가 거의 없는 반복적이고 고정된 작업에 자주 사용된다. 이는 엔비디아의 CUDA GPU 라인이 구현되는 방식이다.

### 구현 지표
장치 이동성이 증가함에 따라 물리적 하드웨어 치수, 전력 소비량, 처리량과 같은 특성을 고려하여 특정 가속 프로토콜의 상대적 성능을 측정하는 새로운 지표가 개발되었다. 이들은 작업 효율성, 구현 효율성, 유연성의 세 가지 범주로 요약될 수 있다. 적절한 지표는 하드웨어의 면적과 해당 작업 처리량 및 소비 에너지 모두를 고려한다.

## 응용 분야
하드웨어 가속의 예로는 그래픽 처리 장치(GPU)의 비트 블릿 가속 기능, 멤리스터를 이용한 신경망 가속, 서버 산업에서 정규 표현식 하드웨어 가속을 이용한 스팸 제어가 있으며, 이는 정규 표현식 서비스 거부(ReDoS) 공격을 방지하기 위함이다. 가속을 수행하는 하드웨어는 범용 CPU의 일부일 수도 있고, 하드웨어 가속기라는 별도의 장치일 수도 있지만, 일반적으로 3D 가속기 또는 암호화 가속기와 같이 더 구체적인 용어로 불린다.

전통적으로 프로세서는 순차적이었고(명령어가 하나씩 실행됨), 명령어 가져오기에 의해 제어되는 범용 알고리즘을 실행하도록 설계되었다(예: 레지스터 파일로 임시 결과 이동). 하드웨어 가속기는 더 큰 병렬성을 허용하고, 임시 변수에 대한 특정 데이터패스를 가지며, 가져오기-디코드-실행 주기에서 명령어 제어 오버헤드를 줄임으로써 특정 알고리즘의 실행을 개선한다.

최신 프로세서는 멀티 코어이며 종종 병렬 "단일 명령어; 다중 데이터"(SIMD) 단위를 특징으로 한다. 이러한 장치는 CPU 내부에 통합되거나 AMD AI 엔진과 같은 추가 구성 요소에 의해 제공될 수 있다. 그럼에도 불구하고 하드웨어 가속은 여전히 이점을 제공한다. 하드웨어 가속은 태스크나 프로그램에서 자주 실행되는 모든 계산 집약적 알고리즘에 적합하다. 세분성에 따라 하드웨어 가속은 작은 기능 단위에서 큰 기능 블록(예: MPEG-2의 움직임 예측)에 이르기까지 다양할 수 있다.

## 애플리케이션별 하드웨어 가속 장치

## 같이 보기
* 코프로세서
* DirectX 비디오 가속 (DXVA)
* 직접 메모리 접근 (DMA)
* 고수준 합성
** C 대 HDL
** 플로우 대 HDL
* 소프트 마이크로프로세서
* 플린 분류의 병렬 컴퓨터 구조
** SIMD
** SIMT
** MIMD
* 함수 연산 컴퓨터

## 각주

## 외부 링크
* 


분류:그래픽 하드웨어
분류:게이트 어레이
분류:중앙 처리 장치
분류:컴퓨터 최적화
분류:ASIC