티스토리 뷰
본 포스팅은 "머신러닝과 블록체인을 떠받치는 GPU의 모든 기술" 책을 읽고, 글쓴이의 생각을 정리하는 포스팅 입니다.
https://book.naver.com/bookdb/book_detail.nhn?bid=13499076
1. GPU 프로그래밍의 메모리
GPU프로그래밍의 메모리를 추상화해서 정리하면 아래와 같습니다.
1_1. Shared Memory(=OpenCL Local Memory).
N당의 경우 SM, A당의 경우 CU단위로 존재하던 Shared Memory에 해당합니다. 각 Work Group(Thread Block)의 Work(Thread)끼리 빠른 데이터 공유가 가능한 SRAM에 해당합니다.
1_2. Global Memory(=OpenCL Global Memory).
모든 Work(Thread)가 접근 가능한 GPU메모리 입니다. CPU에서 DDR메모리와 같은 포지션을 하고 있습니다. 데이터가 없을 경우 CPU와 통신해서 CPU의 DDR메모리(Host Memory)에서 데이터를 가지고 옵니다.
유사하게 Const Memory가 존재하는데, 이 경우는 Glboal과 유사하나 상수만 저장 가능하게(Read Only) 제한한 경우입니다.(이 경우 Read 속도가 빠르다고 하네요)
1_3. Local Memory(=OpenCL Private Memory).
Shared Memory와 유사한 구조를 가지고 있습니다(Work Group 혹은 Thread Block 단위로 공유). 대신 장치메모리쪽에 존재하기 때문에 CPU에서 가상메모리처럼 동작하는걸로 추정해 볼 수 있습니다.
OpenCL의 경우 레지스터, L2 Cache, 장치메모리가 모두 이 부분에 포함된다고 합니다.
2. GPU 프로그래밍의 특수 변수Type
2_1. CUDA
일반적인 Int, FLoat, double, char 등의 자료형은 C언어와 동일하게 사용이 가능합니다.
그 외에 특수하게 Vector형 Type이 제공됩니다.
CUDA의 경우 int3, double2 와 같이 최대 16byte까지 가능한 Vector형 변수가 존재하며, 아래처럼 사용이 가능합니다.
변수의 생성 및 초기화 : make_( x, ... )
//변수Type 변수명 = make_변수Type(x, y, z, w)
float2 xx = make_float2( 1., 2. );
변수의 성분 접근 : variable.x, variable.y, variable.z, variable.w.
http://www.icl.utk.edu/~mgates3/docs/cuda.html
이때 dim3이라는 변수Type은 일반적인 int3과 비슷한 형태이나, GPU에서 실행 될 kernal 프로그램의 grid, block의 차원을 표시할 때 사용합니다.(즉, grid 내 block, block 내 thread는 각각 3차원까지 가능합니다)
2_2. OpenCL
OpenCL의 경우 C언어와 동일한 Type을 사용하나, 앞에 cl_을 붙여서 OpenCL에 사용하는 변수임을 명시해 줍니다
(Ex. char temp[] -> cl_char temp[])
Vector형 Type또한 가능 합니다.
Vector형 Type의 경우 접근이 변수명.sindex형태로 사용이 가능합니다(CUDA와 같은 x, y, z, w도 가능).
대신, OpenCL의 경우 최대 16개의 Component를 가질 수 있기때문에 16진수 형태로 사용됩니다.
//type 변수명 = (type)(성분1, 2, 3, 4)
float4 f = (float4)(1.0f, 2.0f, 3.0f, 4.0f);
//f vector의 0번째 Element의 값을 읽을 때
printf("%d", f.s0);
https://www.khronos.org/registry/OpenCL/specs/2.2/html/OpenCL_C.html
'컴퓨터과학 > GPU' 카테고리의 다른 글
GPU프로그래밍_1(개념) (0) | 2022.03.03 |
---|---|
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
- Greedy알고리즘
- Sort알고리즘
- SIMD
- Search알고리즘
- stack
- 컴퓨터그래픽스
- 병렬처리
- hash
- 알고리즘
- prime number
- 코딩테스트
- 이분탐색
- C++
- git
- Python
- GDC
- 자료구조
- AVX
- 사칙연산
- 분할정복
- heap
- 프로그래머스
- 동적계획법
- 완전탐색 알고리즘
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |