[[컴퓨터공학|컴퓨터 과학 & 공학
Computer Science & Engineering
]]- [ 펼치기 · 접기 ]
- ||<tablebgcolor=#fff,#1c1d1f><tablecolor=#373a3c,#ddd><colkeepall><colbgcolor=#0066DC><colcolor=white> 기반 학문 ||수학(해석학 · 이산수학 · 수리논리학 · 선형대수학 · 미적분학 · 미분방정식 · 대수학(환론 · 범주론) · 정수론) · 이론 컴퓨터 과학 · 암호학 · 전자공학 · 언어학(형태론 · 통사론 · 의미론 · 화용론 · 음운론) · 인지과학 ||
하드웨어 구성 SoC · CPU · GPU(그래픽 카드 · GPGPU) · ROM · RAM · SSD · HDD · 참조: 틀:컴퓨터 부품 기술 기계어 · 어셈블리어 · 바이오스 · 절차적 프로그래밍 · 객체 지향 프로그래밍 · 함수형 프로그래밍 · 해킹 · ROT13 · 일회용 비밀번호 · 사물인터넷 · 와이파이 · GPS · 임베디드 · 인공신경망 · OpenGL · EXIF · 마이크로아키텍처 · ACPI · UEFI · NERF · gRPC · 리버스 엔지니어링 · HCI · UI · UX · 대역폭 · DBMS · NoSQL · 해시(SHA · 브루트 포스 · 레인보우 테이블 · salt · 암호화폐) · RSA 암호화 · 하드웨어 가속 연구 및 기타 논리 회로(보수기 · 가산기 · 논리 연산 · 불 대수 · 플립플롭) · 정보이론 · 임베디드 시스템 · 운영체제(멀티태스킹 · 프로세스 스케줄링 · 데드락 · 식사하는 철학자 문제 · 뮤텍스 · 세마포어 · 인터럽트) · 데이터베이스 · 컴퓨터 언어 · 프로그래밍 언어{컴파일러(어셈블러 · JIT) · 인터프리터 · 유형 이론 · 어휘 분석 · 파싱 · 링커 · 난해한 프로그래밍 언어} · 마크업 언어 · 메타데이터 · 기계학습 · 빅데이터 · 폰노이만 구조 · 양자컴퓨터 · 행위자 모델 · 인코딩(유니코드 · MBCS) · 네트워크(네트워크 포트) · 컴퓨터 보안 · OCR · 슈퍼컴퓨터 · 튜링 머신 · FPGA · 딥러닝 · 컴퓨터 구조론 · 컴퓨터 비전 · 컴퓨터 그래픽스 · 인공지능 · 시간 복잡도(최적화) · 소프트웨어 개발 방법론 · 디자인 패턴 · 정보처리이론 · 재귀 이론 · 자연어 처리(기계 번역 · 음성인식) · 버전 (버전 관리 시스템)
하드웨어 가속 | |
<colbgcolor=#ffffff><colcolor=#000000> 영어 | Hardware Acceleration |
[clearfix]
1. 개요
하드웨어 가속은 CPU에서 동작하는 소프트웨어를 사용하는 것이 아닌 별도 하드웨어를 사용하여 동영상 같은 많은 자원이 필요한 작업을 빠르게 하는 기술이다.2. 원리
우리가 웹서핑을 하거나 동영상을 재생할 때 화면을 표시하기 위해 어떤 픽셀에 어떤 색을 표시할지 연산해야 한다. 이러한 연산을 프로그램, 즉 소프트웨어가 직접 처리하면 해당 과정을 CPU가 처리해야 한다. 하지만 CPU는 해당 연산 말고도 처리해야 할 연산이 많아 느려질 수 있기에 GPU와 같이 해당 작업에 특화된 하드웨어로 넘겨서 처리하게 되고, 이것이 하드웨어 가속이다.즉, 하드웨어 가속이란 소프트웨어적으로 처리할 경우 오래 걸리는 작업을 빠르게 처리하기 위해 별도의 특화된 회로를 탑재한 것이라고 할 수 있다. 아무리 소프트웨어를 최적화하려고 기를 써봐야, 아예 회로 레벨에서부터 최적화한 것의 성능을 따라잡을 수는 없기 때문이다.
그리고 오늘날에는 GPU까지 가지 않더라도 CPU 자체에도 여러 하드웨어 가속 회로가 내장되어 있다. 예를들어 대부분의 CPU는 AES 암호화나 SHA 해싱 기능을 하드웨어 가속 기능으로 자체 내장하고 있어, 소프트웨어적으로 구현하려면 꽤나 비싼 작업에 속하는 암복호화가 매우 빠르게 이루어지고 있다.
2.1. 동영상 처리에서
일반적으로 x86 PC나 노트북의 경우 CPU에는 동영상을 처리할 수 있는 전용 하드웨어가 없고 GPU와 함께[2] 탑재되는데, 이로 인해 GPGPU를 통해 디코딩이 되는 것 처럼 착각하는 사례가 종종 있다. 하지만 GPGPU는 CPU에 비해 동영상 코덱의 디코딩에 있어서 크게 유리한 점이 없고, 주로 GPU 코어에 함께 패키징되는 동영상 코덱 처리 전용 ASIC에 의해 디코딩되며 이로 인해 코어가 제조된 시기에 따라 디코딩 가능한 코덱에 차이가 생긴다. 다만 디코딩된 영상에 적용되는 필터 중 일부가 GPGPU를 활용하는 경우는 있다.한편 ARM의 경우 특별한 이유가 있어서 PCIe GPU를 따로 장착[3]하는 경우가 아니라면 CPU에 함께 패키징되며 이런 경우 GPU에 탑재되는 x86과는 약간 다른 흐름이 만들어진다.
하드웨어 가속을 사용해 동영상을 재생하거나 트랜스코딩하는 경우 이상적인 파이프라인이라면 대강 아래와 같은 흐름의 작업[4]이 만들어진다.
- 재생 소프트웨어가 파일(또는 메모리[5])을 읽어 동영상 처리 유닛이 사용할 메모리[6]에 올려놓는다.
- 디코딩이 실행되면 동영상 처리 유닛이 메모리를 읽어 코덱을 디코딩하여 NV12로 만든다.
- 필요하다면 디코딩된 화상에 필터를 적용[7]하며 이때는 주로 GPGPU를 사용한다.
- 처리가 완료된 영상을 그대로 화면에 표시하거나, 다시 동영상 처리 유닛으로 인코딩한다.
위의 흐름에서 알 수 있듯, 잘 만들어진 동영상 처리 파이프라인은 PCIe의 대역폭을 원본 영상의 대역폭만큼만 차지하고 CPU나 GPU는 그냥 놀게 되므로 전력도 절감되어 큰 이득을 얻을 수 있다. 하지만 하드웨어 디코더나 필터가 지원하지 않아 PCIe를 통한 화상 전송이 일어나는 경우 디코딩된 프레임을 매번 PCIe를 통해 전송하게 되므로[8] 상황에 따라 GPU를 활용하는 것이 오히려 낭비가 될 수도 있다.
3. 장점
- 렌더링 최적화
그래픽 작업에 최적화되어 있고 많은 코어를 가지고 있는 GPU가 처리하기에, 렌더링 속도가 빨라진다. - 성능 최적화
GPU가 CPU 의 부담을 덜기 때문에 기기의 성능이 비약적으로 증가할 수 있다.
4. 단점
- 범용성
해당 기술은 많은 작업과 연산이 필요한 동영상 재생, 2D/3D 렌더링 등을 대상으로 한 기술이기에 범용성이 좁다. - 호환성
GPU마다 성능이 다르고 호환성의 문제로 인해 드라이버가 필요할 가능성이 높다. - 안정성
호환성 문제에서 이어지는 것으로, 프로그램이 직접 하는 것이 아닌 GPU 즉 외부 하드웨어를 통하여 연산하기 때문에 픽셀 문제가 발생할 가능성이 있다.사례 예시로 Google Chrome에서 이런저런 문제가 발생했을 때, 단골 해결책으로 '하드웨어 가속 꺼라/켜라'가 제시되는 것도 이 때문이다.
5. 예시
KMPlayer[9] 에 있는 하드웨어 가속이다.
Chrome[10] 에 있는 하드웨어 가속이다.
[1] 디스코드 설정-고급에서 볼수 있는 화면[2] x86에서는 CPU에 내장그래픽이 있더라도 마치 PCIe를 통해 연결된 외장그래픽이 있는 것 처럼 관측되므로 GPU에 탑재되었다고 표현한다.[3] 현재 소비자용 ARM CPU 탑재 장치는 PCIe GPU를 장착할 수 있도록 제조되는 일이 없으며 서버 등 특수한 경우는 이론적으로 가능할 수 있으나 불완전한 드라이버로 고통을 받게 된다.[4] 본 문단에서는 FFmpeg의 디코더 - 필터 - 인코더 흐름으로 설명한다. 대부분 비슷한 흐름으로 작업이 이루어지지만 용어나 단계에는 소프트웨어마다 다소간의 차이가 있을 수 있다.[5] 스트리밍으로 재생하는 경우 또는 파이프라인이 불완전하여 소프트웨어(CPU) 디코더가 개입하는 경우.[6] x86의 경우 PCIe를 거쳐 VRAM으로, ARM 통합인 경우 시스템 RAM.[7] 사용자가 명시적으로 필터를 사용하는 경우도 있고 GPU 제조사가 제공하는 동영상 처리 API에서 알아서 사용하는 경우도 있다.[8] 브라우저와 같은 잘 만들어진 소비자용 소프트웨어는 이런 상황을 만들지 않는다. FFmpeg등을 사용해 직접 동영상 처리를 하는 경우 파이프라인을 되는대로 만들다보면 간혹 이런 비효율이 발생한다.[9] 곰플레이어, 다음팟플레이어 기타 등등 포함[10] Microsoft Edge, 네이버 웨일 등 크로미움 기반 브라우저 전체