티스토리 뷰

728x90
반응형

본 포스팅은 "머신러닝과 블록체인을 떠받치는 GPU의 모든 기술" 책을 읽고, 글쓴이의 생각을 정리하는 포스팅 입니다.

https://book.naver.com/bookdb/book_detail.nhn?bid=13499076 

 

머신러닝과 블록체인을 떠받치는 GPU의 모든 기술

이 책은 GPU의 기본 구조와 기술 동향에 초점을 맞춘 해설서입니다. 3D 그래픽, 게임, 모바일, VR/AR, 과학 기술 계산, 그리고 인공지능/딥러닝에 이르기까지 폭넓은 분야에서 GPU/병렬 계산의 중요도

book.naver.com

 

1. GPU프로그래밍

현대 GPU프로그래밍(Graphic 프로그래밍 말고) C언어 기반에, C언어와 유사한 문법을 갖는 언어로 사용이 가능합니다.

 

C언어의 확장 형태로 불리며, CUDA와 OpenCL 2개가 가장 유명하다고 할 수 있습니다.

 

1_1. CUDA(Computer Unified Device Architecture)

Cuda의 경우 이름에서 알 수 있듯, Nvidia GPU전용 GPU 프로그래밍 입니다. 

 

__global__ Void foo()

와 같이 __global__ 이라고 적힌 prefix로 정의된 함수가 GPU에서 실행될 수 있는 커널프로그램이 됩니다.

 

CUDA로 작성된 소스코드는 PTX(Parallel Thread Execution)라는  어셈블리 형태로 변형됩니다.

 

낮은 버전의 PTX는 높은 버전의 PTX에서 사용이 가능한 호환성을 가지고 있습니다.

 

1_2. OpenCL(Open Computing Language)

OpenGL등을 개발한 Kronous 재단에서 개발, 배포중인 GPU 프로그래밍 언어입니다.

 

OpenCL의 경우 AMD와 Nvidia GPU모두 활용 가능하며, CPU와 DSP등 보다 넓은 Processor에서 활용이 가능합니다.

 

OpenCL역시 C언어 기반의 확장형태로 사용됩니다.

 

__kernel Void foo()

와 같이 prefix에 __kernel이라고 적힌 prefix로 정의된 함수가 GPU에서 실행될 수 있는 커널 프로그램이 됩니다.

 

OpenCL로 적힌 소스코드는 SPIL-V라는 중간 표현으로 변환되고, 각 장치 제조사들은 SPIL-V를 자신들의 GPU에 돌아가게 드라이버를 제공하게 됩니다.

 

 

2. GPU프로그래밍의 흐름

일반적인 CPU 프로그래밍의 중간에 GPU프로그래밍으로 작성된 Kernal 함수가 존재하는 형태가 됩니다. 간단한 Diagram으로 그린 프로그래밍 흐름도는 아래와 같습니다.

 

일반적인 GPU 프로그래밍의 흐름도

근데 흐름을 살펴보면 다른 프로그래밍언어의 ThreadPool 방식과 유사한 점을 알 수 있습니다.

(ThreadPool방식 또한 일반적으로 직렬로 진행되다, 특정 부분만 병렬로 처리됩니다)

 

때문에 Nvidia의 경우 CUDA 이외에도 OpenMP, OpenACC와 같은 자동 병렬화 도구도 계속 개발중으로 알려져 있습니다. (데이터 의존성이 없는 반복문 등에서 적용이 가능합니다)

 

 

728x90
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함