엔비디아 그래픽: CUDA — GPU 병렬 컴퓨팅

컴퓨터 안에는 두 종류의 일꾼이 있어요
컴퓨터 안에는 계산을 하는 부품이 두 개 있어요. 하나는 CPU, 또 하나는 GPU예요.
CPU는 아주 똑똑한 선생님 몇 명이라고 생각해 보세요. 어려운 문제도 척척 풀어요. 하지만 사람 수가 적어요. 보통 4명에서 16명 정도예요.
GPU는 학생 수천 명이 모인 큰 강당이에요. 한 명 한 명은 선생님보다 느려요. 그런데 수가 엄청나게 많아요. 수천 명이 동시에 문제를 풀 수 있죠.
덧셈 문제 만 개를 풀어야 한다면 누가 이길까요? 선생님 8명보다 학생 5천 명이 훨씬 빨라요. 한 사람이 두 문제씩만 풀면 끝나니까요. 이렇게 "여럿이 동시에 나눠서 푸는 것"을 병렬 계산이라고 불러요.
그런데 문제가 하나 있었어요
GPU는 원래 게임 화면을 그리려고 만든 부품이에요. 화면에는 점(픽셀)이 수백만 개 있어요. 그 점들을 동시에 색칠해야 하니까, 처음부터 "많은 일꾼" 구조로 만들어진 거예요.
사람들은 생각했어요. "이 수천 명의 일꾼에게 그림 말고 다른 일도 시킬 수 없을까?" 과학 계산이나 인공지능 공부 같은 것 말이에요.
그런데 방법이 없었어요. GPU에게 말을 거는 언어가 "그림 그리기" 전용이었거든요. 수학 숙제를 시키고 싶어도 "이걸 그림인 척 바꿔서" 시켜야 했어요. 너무 불편했죠.
CUDA는 GPU에게 말을 거는 방법이에요
그래서 GPU를 만드는 회사인 엔비디아(Nvidia)가 해결책을 내놓았어요. 그게 바로 CUDA(쿠다)예요. 2004년에 만들기 시작해서 2007년에 세상에 나왔어요.
CUDA는 쉽게 말하면 "GPU에게 일반 일도 시킬 수 있게 해 주는 통역사"예요. 프로그래머가 평소 쓰는 프로그래밍 언어로 명령을 쓰면, CUDA가 그것을 GPU 수천 명의 일꾼에게 나눠 줘요.
원래 CUDA는 "Compute Unified Device Architecture"라는 긴 이름의 줄임말이었어요. 지금은 엔비디아가 그 뜻을 거의 쓰지 않고, 그냥 "CUDA"라는 이름으로만 불러요.
CUDA는 어떤 순서로 일할까요?
CUDA가 일하는 순서는 딱 4단계예요. 학교에 비유하면 이래요.
- 문제지 나눠 주기 — 풀어야 할 숫자들을 CPU 쪽 기억 장소에서 GPU 쪽 기억 장소로 복사해요. 선생님이 강당의 학생들에게 문제지를 가져다주는 거예요.
- "시작!" 외치기 — CPU가 GPU에게 "이 계산을 시작해!"라고 신호를 보내요. 이 계산 명령 묶음을 커널이라고 불러요.
- 다 같이 풀기 — GPU 안의 수천 개 작은 계산기(CUDA 코어)가 동시에 문제를 풀어요. 여기가 제일 빠른 부분이에요.
- 답안지 걷기 — 다 푼 결과를 GPU 기억 장소에서 다시 CPU 쪽으로 복사해 와요.
이 흐름을 그림으로 보면 이렇게 생겼어요.
CUDA 덕분에 무엇이 달라졌을까요?
CUDA가 나온 뒤로 GPU는 게임 말고도 온갖 곳에서 일하게 되었어요.
- 인공지능 — 인공지능은 곱셈과 덧셈을 수억 번 반복하며 배워요. 똑같은 계산을 엄청나게 많이 하는 일이라, 수천 명이 나눠 푸는 GPU에게 딱 맞아요. 요즘 유명한 인공지능 대부분이 CUDA로 훈련됐어요.
- 과학 연구 — 날씨 예측, 신약 개발, 우주 시뮬레이션처럼 계산이 어마어마하게 많은 연구에 쓰여요.
- 영상과 사진 — 동영상 변환이나 특수 효과도 훨씬 빨라졌어요.
직접 써 본 사람들이 느끼는 점
쓸 때 좋은 점은 확실해요. 며칠 걸리던 계산이 몇 시간, 몇 분으로 줄어드는 걸 눈으로 보게 돼요. 그리고 나온 지 오래돼서 자료가 정말 많아요. 막히면 검색만 해도 비슷한 고민을 한 사람의 답을 찾을 수 있고, 이미 만들어진 도구 상자(라이브러리)도 잔뜩 있어서 어려운 부분은 가져다 쓰면 돼요.
쓸 때 힘든 점도 있어요. 첫째, CUDA는 엔비디아 전용이에요. 다른 회사 GPU에서는 안 돌아가요. 그래서 CUDA로 프로그램을 만들면 엔비디아 제품에 묶이게 돼요. 둘째, 아까 본 1단계와 4단계, 즉 데이터를 복사해서 보내고 받아오는 시간이 생각보다 길어요. 계산할 양이 적으면 복사하는 시간이 더 걸려서 오히려 CPU보다 느려지기도 해요. 셋째, 수천 개의 일꾼이 동시에 움직이다 보니, 프로그램이 잘못됐을 때 "누가 어디서 틀렸는지" 찾는 게 무척 어려워요. 한 명이 푼 시험지를 채점하는 것과 5천 명이 동시에 푼 시험지를 채점하는 것의 차이라고 보면 돼요.
정리해 볼까요?
- CPU는 똑똑한 선생님 몇 명, GPU는 학생 수천 명이 모인 강당이에요.
- GPU는 원래 게임 화면용이었지만, 사람들은 그 많은 일꾼에게 다른 일도 시키고 싶었어요.
- CUDA는 엔비디아가 만든 통역사예요. 덕분에 GPU에게 그림 말고도 온갖 계산을 시킬 수 있게 됐어요.
- 일하는 순서는 "문제지 나눠 주기 → 시작 신호 → 다 같이 풀기 → 답안지 걷기" 4단계예요.
- 오늘날 인공지능과 과학 연구가 빨라진 데에는 CUDA의 몫이 아주 커요.
다음에 "이 인공지능은 GPU 수천 장으로 훈련했대"라는 말을 들으면 떠올려 보세요. 그 뒤에는 수천 명의 학생에게 문제지를 나눠 주는 통역사, CUDA가 있답니다.
출처
리깅 파이프라인 자동화 도구
반복 작업은 스크립트에게. 현업에서 쓰는 리깅 툴 모음.
리깅 도구 보기