티스토리 뷰
본 포스팅은 "머신러닝과 블록체인을 떠받치는 GPU의 모든 기술" 책을 읽고, 글쓴이의 생각을 정리하는 포스팅 입니다.
https://book.naver.com/bookdb/book_detail.nhn?bid=13499076
1. 데이터의 병렬처리
풀린의 분류라고 하여, 데이터를 처리하는 방법으로 크게 4가지로 나뉩니다.
1. SISD(instruction : single, data : single)
2. SIMD(instruction : single, data : multi)
3. MISD(instruction : multi, data : single)
4. MIMD(instruction : multi, data : multi)
https://ko.wikipedia.org/wiki/%ED%94%8C%EB%A6%B0_%EB%B6%84%EB%A5%98
이때 컴퓨터과학쪽에서 가장 익숙한 병렬처리 방법으로 SIMD가 있습니다.
SIMD는 하나의 명령어를 다수의 Data에 적용하는 방식으로, CPU와 GPU에서 모두 사용되는 방법 입니다.
(물론 SIMD의 결과는 같지만, 작동한는 방법은 차이가 있습니다)
CPU의 경우, AVX와 같은 Vector Extension을 활용해서 추가적인 레지스터를 사용하는 방법으로 SIMD를 구현하고,
GPU의 경우 다수의 연산기가 서로다른 Data에 동일한 명령어를 적용하는 방식으로 SIMD가 구현됩니다.
2. SIMD와 SIMT
SIMD는 하드웨어 설계와 맞춰진 N배수의 데이터를 동시에 계산할때 최대의 효율이 나옵니다.
하지만, 하드웨어에서 4개를 동시에 처리할 수 있게 해놨는데, 5개의 데이터를 묶어서 동시에 처리해야하면 효율이 급감하게 됩니다.
그리고 이런 vector 처리를 위해서 별도의 프로그래밍이 필요합니다.
반면, SIMT(Single Instruction Multi Thread) 방법은 이 경우 보다 유연하게 처리가 가능합니다.
예를들어서 100개의 데이터가 있다고 쳐 봅니다.
SIMD를 사용하면 2Cycle(4개 + 1개)*20 = 40Cycle
(각 변수마다 1Cycle이 걸린다 치면, 4개를 SIMD로 처리하는데 1Cycle + 나머지 1개 변수를 처리하는데 1Cycle이 걸립니다(
SIMT를 사용하면 5Cycle*20/4 = 25Cycle
(각 변수마다 1Cycle이 걸린다 치면, 5개의 변수를 처리하는데 5Cycle이 걸리고 이런 Job이 20Thread가 존재하게 되며, 이 20Thread를 4개의 코어에서 나누게 됩니다)
즉, 한번에 처리할 수 있는 Data의 수는 동일하나, Thread는 이 데이터의 묶음이 Thread마다 나뉘기 때문에 보다 유연한 프로그래밍이 가능합니다.
때문에 해당 책이 발행된 18년도에는 이미 SIMD보다 SIMT가 GPU에서 대세로 자리잡았습니다.
SIMT가 중요한 점은, OpenCL 프로그래밍에서 Thread단위로 프로그래밍이 진행되기 때문에 GPU의 Thread개념은 OpenCL을 사용할 프로그래머도 알아둬야할 지식이 됩니다.
'컴퓨터과학 > 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
- stack
- GDC
- git
- 동적계획법
- 프로그래머스
- 코딩테스트
- C++
- SIMD
- 자료구조
- 분할정복
- Sort알고리즘
- Python
- 이분탐색
- 알고리즘
- heap
- prime number
- 병렬처리
- Greedy알고리즘
- AVX
- 완전탐색 알고리즘
- Search알고리즘
- 사칙연산
- 컴퓨터그래픽스
- hash
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |