그래픽카드를 이용한 하드웨어 가속이란 무엇인가요?
- 면접 출제
- ★
- 예상 시간
- 7분
그래픽카드는 단순하고 독립적인 연산을 수천 개 코어로 동시에 처리하는 데 강합니다. 하드웨어 가속은 렌더링, 이미지 처리, 영상 인코딩, 머신러닝 연산처럼 GPU가 잘하는 작업을 GPU에 맡기는 방식입니다.
웹에서는 CSS transform, canvas, WebGL, video decoding 같은 작업에서 GPU 가속이 사용될 수 있습니다. 다만 GPU로 보내는 비용, 메모리 이동 비용, driver/browser 제약도 고려해야 합니다.
꼬리질문
조금 더 깊게 물어본다면
답변 뒤에 이어질 수 있는 질문들을 하나씩 열어볼 수 있어요.
하드웨어 가속이 소프트웨어보다 빠른 이유는?
특정 연산을 자주 처리하도록 설계된 회로를 쓰기 때문입니다. CPU는 범용 명령어를 fetch → decode → execute 사이클로 처리하지만, 전용 하드웨어는 해당 연산에 맞춘 파이프라인으로 처리합니다.
AES 암호화를 예로 들면, CPU로 처리하면 각 단계를 범용 명령어로 수십 번 처리해야 합니다. Intel의 AES-NI는 AES 라운드 연산 자체가 회로로 구현되어 한 클럭에 처리합니다.
전력 효율도 차이납니다. CPU는 명령어 해석, 분기 예측, 캐시 관리 같은 오버헤드가 크지만 전용 회로는 정해진 연산을 반복 처리하도록 만들어져 있습니다. 스마트폰에서 영상을 재생할 때 CPU 사용률이 낮게 유지되는 이유도 여기에 가깝습니다.
GPU 가속과 전용 하드웨어 가속은 같은 말인가요?
완전히 같은 말은 아닙니다. GPU 가속은 GPU의 병렬 연산 능력을 활용하는 경우를 말하고, 전용 하드웨어 가속은 특정 작업을 위해 만든 별도 회로를 활용하는 경우까지 포함합니다.
예를 들어 이미지 필터나 행렬 연산은 GPU의 많은 연산 유닛이 나눠 처리하기 좋습니다. 반면 H.264, HEVC, AV1 디코딩은 GPU의 일반 연산 코어가 아니라 GPU 칩이나 SoC 안의 비디오 디코더 블록이 처리하는 경우가 많습니다.
그래서 "GPU가 영상을 처리한다"는 말에는 두 의미가 섞입니다. 하나는 픽셀 변환, 스케일링, 합성 같은 병렬 계산을 GPU가 처리한다는 뜻입니다. 다른 하나는 GPU 주변의 전용 비디오 하드웨어가 코덱 처리를 맡는다는 뜻입니다.
GPU 외에 하드웨어 가속의 예시는?
ISP, NPU, 코덱 ASIC, 암호화 엔진 등이 있습니다. 하드웨어 가속은 GPU만의 개념이 아니라, 특정 연산을 전담하는 모든 전용 회로를 포함합니다.
- ISP(Image Signal Processor): 스마트폰 카메라에서 센서 노이즈 제거, 화이트밸런스, HDR 합성을 실시간으로 처리합니다. CPU로는 초당 수십 프레임을 쫓아갈 수 없습니다.
- NPU / Neural Engine: Apple Silicon의 Neural Engine, Qualcomm의 Hexagon이 온디바이스 ML 추론을 담당합니다. 얼굴 인식이나 음성 인식을 배터리 소모 없이 실시간으로 처리하는 이유입니다.
- 코덱 ASIC: NVIDIA의 NVDEC/NVENC, Apple의 VideoToolbox가 H.264/HEVC/AV1 인코딩·디코딩을 전담합니다.
- AES 엔진: 디스크 암호화, HTTPS 처리를 CPU 주 코어 개입 없이 처리합니다.
하드웨어 인코딩과 소프트웨어 인코딩의 차이는?
하드웨어 인코딩은 빠르고 CPU 부하가 낮지만, 같은 화질을 내려면 파일이 더 큽니다. 소프트웨어 인코딩은 느리지만 압축 효율이 높습니다.
하드웨어 인코더(NVENC, VideoToolbox)는 고정 회로라 복잡한 최적화 알고리즘을 돌릴 수 없습니다. 소프트웨어 인코더(x264, x265)는 look-ahead나 B-frame 배치 같은 분석을 거쳐 같은 비트레이트에서 화질이 더 좋습니다.
그래서 라이브 스트리밍처럼 실시간이 중요한 경우엔 하드웨어 인코딩을 쓰고, 최종 렌더링이나 아카이빙처럼 품질이 중요한 경우엔 소프트웨어 인코딩을 씁니다. OBS 같은 방송 소프트웨어가 이 선택지를 제공하는 이유이기도 합니다.
GPU가 병렬 처리에 강한 이유는?
작고 많은 연산 유닛으로 같은 종류의 연산을 여러 데이터에 동시에 적용하는 구조이기 때문입니다.
GPU는 수천 개의 셰이더 코어를 가집니다. 모든 코어가 같은 명령을 서로 다른 데이터에 동시에 실행하는 방식(SIMT)입니다. 픽셀 렌더링을 예로 들면, 각 픽셀 계산이 독립적이라 수천 픽셀을 한 번에 처리할 수 있습니다.
데이터 병렬성이 크다는 말은 무슨 뜻인가요?
많은 데이터 조각에 같은 연산을 독립적으로 적용할 수 있다는 뜻입니다. 한 데이터의 계산 결과가 다른 데이터 계산에 거의 필요하지 않으면 여러 스레드가 동시에 나눠 처리할 수 있습니다.
이미지 밝기를 조정하는 작업을 생각하면 쉽습니다. pixel[0]의 밝기를 바꾸는 계산은 pixel[1]의 결과를 기다릴 필요가 없습니다. 각 픽셀에 같은 식을 적용하면 되므로 수많은 픽셀을 병렬로 처리할 수 있습니다.
반대로 이전 단계의 결과가 다음 단계 입력이 되는 작업은 병렬화하기 어렵습니다. 분기가 많거나 순서 의존성이 강한 작업도 GPU에 덜 맞습니다.
CPU와 GPU의 구조적 차이는?
CPU는 소수의 강력한 코어로 복잡한 순차 연산과 분기 처리에 최적화되어 있습니다. GPU는 수천 개의 작은 코어를 가지며, 같은 연산을 대량의 데이터에 동시에 적용하는 병렬 처리에 최적화되어 있습니다. 제어 흐름이 복잡한 작업은 CPU가 유리하고, 단순 반복 연산이 많은 작업은 GPU가 유리합니다.
CPU는 코어당 성능을 높이기 위해 분기 예측, 파이프라이닝, 대용량 캐시를 갖춥니다. 코어 수는 보통 4-16개입니다.
GPU는 코어당 성능이 낮은 대신 수천 개의 코어를 병렬로 운영합니다. 복잡한 제어 흐름보다 대량 단순 연산의 처리량(throughput)을 극대화하는 구조입니다.
SIMD와 GPU 병렬화는 어떻게 다른가요?
SIMD(Single Instruction, Multiple Data)는 CPU 명령어 수준에서 한 번에 여러 데이터를 처리하는 방식입니다. 레지스터 하나에 여러 값을 묶어 동시에 연산합니다. GPU 병렬화는 수천 개의 독립적인 스레드를 실행하는 방식으로, 규모가 훨씬 크고 별도 메모리 공간에서 동작합니다.
SIMD는 CPU 안에서 동작합니다. AVX2 명령어를 예로 들면 256비트 레지스터에 float 8개를 묶어 한 명령으로 곱셈합니다. CPU 캐시와 메모리를 바로 쓰므로 이동 비용이 없습니다.
GPU는 별도 장치라 데이터를 CPU 메모리에서 VRAM으로 먼저 복사해야 합니다. 이 이동 비용이 있기 때문에 처리할 데이터가 충분히 많아야 이득이 납니다.
브라우저에서 GPU 가속은 언제 사용되나요?
transform, opacity animation, video decoding, canvas, WebGL 같은 작업에서 GPU가 사용될 수 있습니다.
영상 처리는 왜 GPU에 유리한가요?
영상은 프레임 안의 픽셀이나 블록에 비슷한 연산을 반복하는 일이 많기 때문입니다. 색 변환, 스케일링, 필터링, 레이어 합성은 각 픽셀 또는 블록 단위 계산이 비교적 독립적이라 GPU 병렬 처리와 잘 맞습니다.
4K 한 프레임은 약 830만 픽셀입니다. 초당 60프레임이면 매초 수억 개 픽셀을 다뤄야 합니다. 각 픽셀에 색 변환이나 보간 계산을 적용하는 작업은 데이터가 많고, 연산 형태가 비슷하며, 서로 독립적인 부분이 많습니다.
다만 영상 재생에서 말하는 GPU 가속은 GPU의 셰이더 코어만 뜻하지 않습니다. H.264, HEVC, AV1 같은 코덱 처리는 GPU나 SoC 안의 전용 비디오 디코더가 맡는 경우가 많습니다.
영상에서 합성(compositing)은 무엇인가요?
여러 레이어를 최종 화면 하나로 합치는 작업입니다. 영상 프레임 위에 자막, UI 컨트롤, 반투명 오버레이를 얹어 최종 화면을 만드는 과정이 합성입니다.
브라우저 화면도 여러 레이어로 나뉠 수 있습니다. 배경, 영상, 자막, 버튼, 모달을 각각 그린 뒤 마지막에 하나의 화면으로 합칩니다. 반투명 레이어가 있으면 픽셀마다 원래 색과 위에 올라온 색을 비율로 섞어야 합니다.
이 계산은 화면의 많은 픽셀에 반복되므로 GPU가 처리하기 좋습니다. transform이나 opacity 애니메이션이 비교적 싼 작업으로 취급되는 이유도 레이아웃을 다시 계산하기보다 이미 만들어진 레이어를 합성하는 쪽으로 처리될 수 있기 때문입니다.
압축된 영상을 그대로 화면에 보여줄 수는 없나요?
없습니다. 압축된 비디오 파일은 화면에 바로 찍을 픽셀 배열이 아니라, 프레임을 복원하기 위한 압축된 명령과 데이터에 가깝습니다. 재생하려면 반드시 디코딩해서 실제 프레임으로 복원해야 합니다.
압축된 영상은 모든 픽셀을 그대로 저장하지 않습니다. 이전 프레임과의 차이, 움직임 정보, 변환 계수, 압축된 비트열 같은 형태로 저장합니다. 그래서 파일 크기는 줄지만, 디스플레이 장치가 바로 읽을 수 있는 RGB 픽셀 배열은 아닙니다.
재생 파이프라인은 대략 압축 비트스트림 → 디코딩 → 프레임 복원 → 색 공간 변환/스케일링 → 합성 → 화면 출력 순서로 진행됩니다. 압축 덕분에 저장과 전송 비용은 줄지만, 재생 시점에는 다시 화면에 그릴 수 있는 프레임으로 풀어야 합니다.
인코딩과 디코딩은 언제 필요한가요?
인코딩은 원본 영상 프레임을 저장하거나 전송하기 좋게 압축하는 과정이고, 디코딩은 압축된 영상을 재생할 수 있는 프레임으로 다시 복원하는 과정입니다.
원본 영상은 용량이 매우 큽니다. 1920×1080 해상도, 60fps, RGB 3바이트 기준으로 계산하면 초당 약 373MB가 필요합니다. 네트워크로 보내거나 디스크에 오래 저장하기에는 부담이 큽니다.
그래서 영상을 만들거나 업로드하거나 스트리밍할 때는 H.264, HEVC, AV1 같은 코덱으로 인코딩합니다. 사용자가 영상을 볼 때는 브라우저나 플레이어가 그 압축 데이터를 디코딩해서 프레임을 복원합니다. 즉 인코딩은 제작·저장·전송 쪽에서, 디코딩은 재생 쪽에서 계속 사용됩니다.
GPU로 넘기면 항상 빨라지나요?
아닙니다. 데이터 전송 비용과 작업 크기, 병렬화 가능성에 따라 오히려 느려질 수 있습니다.
느려지는 경우가 있습니다.
- 데이터가 작으면 CPU→GPU 메모리 복사 비용이 연산 이득보다 큽니다.
- 순차 의존성이 있는 작업은 병렬화 이득이 없습니다.
- driver 초기화, context 전환 비용이 더해집니다.
GPU 가속이 효과적인 조건은 데이터가 크고, 각 연산이 서로 독립적이며, GPU 메모리에 오래 머물 수 있을 때입니다.
특정 영상이 하드웨어 가속이 안 되는 이유는?
GPU 안의 하드웨어 디코더가 해당 코덱을 지원하지 않기 때문입니다. 지원하지 않으면 CPU 소프트웨어 디코딩으로 fallback되어 발열과 배터리 소모가 증가합니다.
영상을 재생하려면 압축된 데이터를 풀어야 합니다(디코딩). GPU 안에는 이 작업을 전담하는 하드웨어 디코더 칩이 있고, 코덱마다 별도로 존재합니다.
H.264는 오래된 코덱이라 거의 모든 GPU가 지원합니다. AV1은 2018년에 나온 코덱이라 구형 GPU에는 전용 칩 자체가 없습니다. 유튜브에서 4K 영상을 볼 때 노트북이 뜨거워지는 경우가 AV1 소프트웨어 디코딩으로 CPU를 풀로 쓰는 경우입니다.
GPU 가속의 단점은?
CPU-GPU 간 데이터 이동 비용, 메모리 사용량, 디버깅 난이도, 기기별 차이가 있습니다.
부가 설명
CPU는 복잡한 제어 흐름과 범용 작업에 강하고, GPU는 같은 연산을 많은 데이터에 반복하는 작업에 강합니다.
하드웨어 가속은 무조건 빠른 것이 아니라 workload가 GPU에 맞을 때 효과적입니다.
GPU 가속과 전용 하드웨어 가속은 조금 나누어 보는 편이 좋습니다. GPU의 셰이더 코어는 픽셀 처리, 행렬 연산처럼 병렬성이 큰 계산을 잘 처리합니다. 반면 영상 디코딩·인코딩은 GPU 칩이나 SoC 안에 들어 있는 별도 비디오 디코더/인코더 블록이 맡는 경우가 많습니다.
한 줄 정리
GPU 하드웨어 가속은 CPU가 하던 일부 계산을 병렬 처리에 강한 GPU에 맡겨 처리 속도를 높이는 방식입니다.