티스토리 뷰
본 포스팅은 "머신러닝과 블록체인을 떠받치는 GPU의 모든 기술" 책을 읽고, 글쓴이의 생각을 정리하는 포스팅 입니다.
https://book.naver.com/bookdb/book_detail.nhn?bid=13499076
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으로 그린 프로그래밍 흐름도는 아래와 같습니다.
근데 흐름을 살펴보면 다른 프로그래밍언어의 ThreadPool 방식과 유사한 점을 알 수 있습니다.
(ThreadPool방식 또한 일반적으로 직렬로 진행되다, 특정 부분만 병렬로 처리됩니다)
때문에 Nvidia의 경우 CUDA 이외에도 OpenMP, OpenACC와 같은 자동 병렬화 도구도 계속 개발중으로 알려져 있습니다. (데이터 의존성이 없는 반복문 등에서 적용이 가능합니다)
'컴퓨터과학 > GPU' 카테고리의 다른 글
GPU프로그래밍_2(메모리, 특수 변수Type) (0) | 2022.03.04 |
---|---|
GPU의 Thread(Work) 처리 방법 (0) | 2022.03.03 |
GPU 메모리 구조 (0) | 2022.03.03 |
GPU구조와 Thread(Work)의 단위 (0) | 2022.02.26 |
GPU 성능지표와 메모리 대역폭 (0) | 2022.02.25 |
- Total
- Today
- Yesterday
- 분할정복
- 병렬처리
- 알고리즘
- stack
- 사칙연산
- hash
- prime number
- heap
- 프로그래머스
- 완전탐색 알고리즘
- Search알고리즘
- C++
- SIMD
- 동적계획법
- 이분탐색
- git
- 코딩테스트
- Python
- Greedy알고리즘
- 자료구조
- AVX
- GDC
- 컴퓨터그래픽스
- Sort알고리즘
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |