지난 포스팅에서 엔비디아 쿠다의 기본 개념과 전반적인 구조에 대해 살펴보았습니다.
오늘은 이어서 쿠다의 기술적 특징을 조금 더 자세히 알아볼게요.
쿠다의 하드웨어 계층

쿠다 코어와 스트리밍 멀티 프로세서
쿠다의 하드웨어 계층은 GPU로 구성되어 있는데요. 이 GPU 내부에는 수많은 쿠다 코어들이 있고, 이 코어들은 스트리밍 멀티프로세서(Streaming Multi Processor, SM)라는 유닛으로 묶여 있습니다. 각각의 SM은 수십 개에서 수백 개의 쿠다 코어를 포함하고 있어요. 쿠다 코어는 일종의 연산 유닛으로 간단한 정수 및 부동 소수점 연산을 수행합니다.
SM은 워프(Warp)라는 32개의 스레드 묶음을 동시에 실행합니다. 이 스레드들은 SIMT(Single Instruction Multiple Thread) 방식으로 동작하는데, 쉽게 말해 하나의 명령어가 여러 스레드에 동시에 적용되는 거예요. 마치 한 반에서 선생님의 지시에 따라 모든 학생이 동시에 같은 문제를 푸는 것과 비슷합니다.
쿠다의 메모리 계층 구조
쿠다는 효율적인 데이터 처리를 위해 여러 종류의 메모리를 계층적으로 구성하고 있습니다. 마치 우리가 자주 쓰는 물건은 손이 닿기 쉬운 곳에, 가끔 쓰는 물건은 창고에 보관하는 것처럼 각 메모리는 용도에 따라 다른 속도와 용량을 가지고 있어요.
GPU에서 사용되는 주요 메모리 공간은 다음과 같습니다.
- 글로벌 메모리(Global Memory): GPU의 주 메모리로, 가장 큰 용량을 가지지만 접근 속도가 상대적으로 느립니다. 모든 데이터가 처음 저장되는 곳이라고 볼 수 있습니다.
- 공유 메모리(Shared Memory): 같은 SM 내의 스레드들이 공유하는 고속 메모리입니다. 마치 한 팀원들이 함께 보는 화이트보드처럼, 스레드 간 빠른 데이터 공유가 가능합니다.
- 상수 메모리(Constant Memory): 읽기 전용 메모리로 모든 스레드에서 접근 가능합니다. 프로그램 실행 중에 변하지 않는 값들을 저장하는 데 사용됩니다.
- 텍스처 메모리(Texture Memory): 이미지 처리에 최적화된 읽기 전용 메모리입니다. 이미지 데이터를 효율적으로 처리할 수 있도록 특별히 설계되었습니다.
- 레지스터(Registers) : 각 스레드가 독립적으로 사용하는 가장 빠른 메모리입니다.
이 메모리들을 상황에 맞게 적절히 활용하는 것이 쿠다 프로그래밍의 중요한 포인트 중 하나입니다. 하지만 이러한 복잡한 하드웨어 구조를 개발자가 직접 다루기는 쉽지 않죠.
쿠다의 소프트웨어 구조
쿠다 프로그래밍 인터페이스
앞서 살펴본 GPU의 강력한 성능을 개발자들이 쉽게 활용할 수 있도록 쿠다는 다양한 프로그래밍 인터페이스를 세 가지 계층으로 제공합니다.

- 먼저 가장 손쉽게 사용할 수 있는 고수준 라이브러리 계층이 있습니다. cuDNN(딥러닝), cuBLAS(선형대수) 등의 라이브러리가 여기에 속하는데, 개발자는 복잡한 GPU 프로그래밍 없이도 최적화된 성능을 얻을 수 있습니다.
- 중간 계층에서는 CUDA C/C++, Fortran, Python 등의 프로그래밍 언어를 통해 직접 GPU 프로그래밍이 가능합니다. 이 계층의 핵심은 커널(kernel)이라 불리는 특별한 함수입니다. 커널 함수는 CPU(호스트)에서 호출되지만 실제 실행은 GPU(디바이스)에서 이루어지며, 개발자는 이를 통해 어떤 작업을 GPU에서 병렬로 처리할지 지정할 수 있습니다.
- 마지막으로 저수준의 PTX(Parallel Thread Execution) 계층이 있습니다. 위에서 설명한 고수준 프로그래밍 언어로 작성된 코드는 실제 GPU에서 실행되기 위해 쿠다 컴파일러 같은 도구를 통해 PTX 코드로 변환되는 과정이 필요합니다. PTX는 일종의 가상 어셈블리 언어로 GPU 아키텍처에 종속되지 않는 레지스터, 메모리, 스레드 등을 제어하기 위한 저 수준의 명령어들로 구성되어 있어 서로 다른 GPU 모델 간의 호환성을 유지할 수 있습니다.
최근 화제가 된 딥시크(DeepSeek)는 이 PTX 단계에서 직접 하드웨어 최적화를 시도했습니다. 이는 그동안 AI 개발에 필수적이라 여겨졌던 엔비디아의 쿠다와 GPU에 대한 의존도를 낮출 수 있는 새로운 가능성을 제시했다는 점에서 큰 의미가 있습니다. 하지만 이러한 접근 방식은 개발 과정의 복잡성을 증가시킬 수 있고, 코드의 안정성과 이식성 측면에서도 세심한 주의가 필요합니다
마무리
지금까지 쿠다의 기본 개념부터 기술적 특징, 그리고 최근의 이슈까지 살펴보았습니다. 쿠다는 지난 20년간 GPU 병렬 컴퓨팅의 핵심 기술로서 AI, 특히 딥러닝 분야의 발전에 결정적인 기여를 해왔습니다.
하지만 최근 딥시크의 사례에서 보듯 쿠다의 고수준 API를 우회하고 저수준에서 직접 최적화를 시도하는 새로운 접근 방식도 주목받고 있습니다. 이는 AI 기술이 계속해서 새로운 돌파구를 찾아 진화하고 있음을 보여주는 좋은 예시입니다.
이처럼 AI 기술은 끊임없이 발전하고 있습니다. 쿠다와 같은 검증된 기술을 기반으로 하면서도 새로운 시도들을 통해 그 한계를 뛰어넘으려 노력하고 있죠. 앞으로도 이러한 다양한 시도들이 AI 기술 발전에 새로운 가능성을 열어줄 것으로 기대됩니다.
