Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
병렬 프로그래밍과 CUDA
icysword@nate.com
Parallel Programming & CUDA
윤 석준 책임연구원
2014-04-23 2 윤석준 (icysword@nate.com)
이 발표에서 다루는 것
1. 병렬 프로그래밍의 이해
2. 병렬 프로그래밍 기법
2.1. Core 내부 병렬 프로그래밍
2.2. Thread 병렬 프로그래...
2014-04-23 3 윤석준 (icysword@nate.com)
Moore의 법칙
마이크로칩의 처리 능력이 18개월마다 2배로 늘어난다
CO-FOUNDER, INTEL
Intel Core i3 / i5 / i7
201...
2014-04-23 4 윤석준 (icysword@nate.com)
Multicore Processor
i7 i5 i3
Cores 4 4 2
Threads 8 4 4
2014-04-23 5 윤석준 (icysword@nate.com)
병렬 프로그래밍
𝒌
𝟏𝟎𝟎𝟎𝟎
𝑘=0
병렬처리가 가능한 경우
- 서로 영향을 미치지 않는 작업들
𝒌
𝟏𝟎𝟎𝟎
𝑘=0
𝒌
𝟐𝟎𝟎𝟎
𝑘=𝟏𝟎𝟎𝟏
𝒌
𝟏𝟎𝟎𝟎...
2014-04-23 6 윤석준 (icysword@nate.com)
병렬 프로그래밍 기법
① Core 내부 병렬 프로그래밍
② Thread 병렬 프로그래밍
③ Process 병렬 프로그래밍
④ GPGPU를 이용한 병렬 프...
2014-04-23 7 윤석준 (icysword@nate.com)
Core 내부 병렬 프로그램
SIMD
(Single Instruction Multiple Data)
int a = 1 + 2;
int b = 3 + 4;...
2014-04-23 8 윤석준 (icysword@nate.com)
Thread 병렬 프로그램
• OpenMP
• pthreads
• Parallel Pattern Library
• 멀티스레딩 프로그램
Loop 병렬화 S...
2014-04-23 9 윤석준 (icysword@nate.com)
Process 병렬 프로그램
• MPI
• HPF
• PVM
2014-04-23 10 윤석준 (icysword@nate.com)
GPGPU 병렬 프로그램
2014-04-23 11 윤석준 (icysword@nate.com)
GPGPU 병렬 프로그램
Floating-Point Operations per Second for the CPU and GPU
● GTX 770 : 3...
2014-04-23 12 윤석준 (icysword@nate.com)
GPGPU 병렬 프로그램
Memory Bandwidth for the CPU and GPU
● GTX 770 : 224.3 GB/s
● i7 : 25....
2014-04-23 13 윤석준 (icysword@nate.com)
CUDA란 ? (Compute Unified Device Architecture)
• 2006년 11월 GeForce 8800 GTX 이후 생산되는 G...
2014-04-23 14 윤석준 (icysword@nate.com)
CPU vs GPU
The GPU Devotes More Transistors to Data Processing
2014-04-23 15 윤석준 (icysword@nate.com)
CUDA Hardware Archetecture
• SM (Streaming Multiprocessor)
• CUDA Core (Streaming Pr...
2014-04-23 16 윤석준 (icysword@nate.com)
CUDA Data Parallel Threading Model
• Block : 작업단위 (SM)
• Warp : SM 내에서 동시 실행 가능한 Thr...
2014-04-23 17 윤석준 (icysword@nate.com)
Structure of CUDA Memory
• Registor
- On Chip Processor 에 있는 Memory
- 함수내의 Local 변수 ...
2014-04-23 18 윤석준 (icysword@nate.com)
CUDA Streaming
• 연산 속도에 비해 Host DRAM 과 GPU DRAM의 Data 전송속도가 느림
• 큰 Data를 가공할 경우 연산시간...
2014-04-23 19 윤석준 (icysword@nate.com)
CUDA Library
• cuRAND : 랜덤수 생성기
(CUDA Random Number Generation library)
• CUFFT : FF...
2014-04-23 20 윤석준 (icysword@nate.com)
CUDA Programming 예제
float fResult[1024][1000];
float fData[1024][1000];
for (int i =...
2014-04-23 21 윤석준 (icysword@nate.com)
CUDA Compute capability (version)
http://en.wikipedia.org/wiki/CUDA
.
.
.
Technical ...
2014-04-23 22 윤석준 (icysword@nate.com)
CUDA 6.0 : Unified Memory
http://devblogs.nvidia.com/parallelforall/unified-memory-i...
2014-04-23 23 윤석준 (icysword@nate.com)
CUDA 적용 사례 : 성공 1
• Beam Pattern 생성
- 1000 방위 x 1000 주파수Bin
- 100개 Sensor ( 각 방위별 Be...
2014-04-23 24 윤석준 (icysword@nate.com)
CUDA 적용 사례 : 성공 2
• 타겟 신호 에 Beam Pattern 적용
- 192 방위 x 1000 주파수Bin
- 16타겟
- Data Rea...
2014-04-23 25 윤석준 (icysword@nate.com)
CUDA 적용 사례 : 실패
• Cubic Spline Interoplation
CPU 연산에 비하여 성능 향상이 없음
… Xi(14) Xi(15) X...
2014-04-23 26 윤석준 (icysword@nate.com)
최근 병렬화 이슈
• Raspberry-Pi
- 700 Mhz ARM11 CPU
- Broadcom Videocore IV GPU
- 256 Mbyte...
2014-04-23 27 윤석준 (icysword@nate.com)
최근 병렬화 이슈
• Multi-GPU Motherboard
http://prod.danawa.com/info/?pcode=2466508&cate1=8...
Upcoming SlideShare
Loading in …5
×

병렬프로그래밍과 Cuda

7,065 views

Published on

각 페이지별 상세 Comment가 있는 발표 대본이 필요하신 분은 http://icysword.blog.me/140211074576 에서 다운로드가 가능합니다.

Published in: Software

병렬프로그래밍과 Cuda

  1. 1. 병렬 프로그래밍과 CUDA icysword@nate.com Parallel Programming & CUDA 윤 석준 책임연구원
  2. 2. 2014-04-23 2 윤석준 (icysword@nate.com) 이 발표에서 다루는 것 1. 병렬 프로그래밍의 이해 2. 병렬 프로그래밍 기법 2.1. Core 내부 병렬 프로그래밍 2.2. Thread 병렬 프로그래밍 2.3. Process 병렬 프로그래밍 2.4. GPGPU를 이용한 병렬 프로그래밍 3. CUDA 란 ? 4. CUDA 적용 사례 5. 최근 병렬화 이슈 6. 질의 및 응답
  3. 3. 2014-04-23 3 윤석준 (icysword@nate.com) Moore의 법칙 마이크로칩의 처리 능력이 18개월마다 2배로 늘어난다 CO-FOUNDER, INTEL Intel Core i3 / i5 / i7 2010년 1월 Clarkdale 기준 - i3 : 3.3 GHz - i5 : 3.6 GHz - i7 : 3.2 GHz 2014년 2월 현재 Haswell 기준 - i3 : 2.4 GHz - i5 : 2.9 GHz - i7 : 3.3 GHz
  4. 4. 2014-04-23 4 윤석준 (icysword@nate.com) Multicore Processor i7 i5 i3 Cores 4 4 2 Threads 8 4 4
  5. 5. 2014-04-23 5 윤석준 (icysword@nate.com) 병렬 프로그래밍 𝒌 𝟏𝟎𝟎𝟎𝟎 𝑘=0 병렬처리가 가능한 경우 - 서로 영향을 미치지 않는 작업들 𝒌 𝟏𝟎𝟎𝟎 𝑘=0 𝒌 𝟐𝟎𝟎𝟎 𝑘=𝟏𝟎𝟎𝟏 𝒌 𝟏𝟎𝟎𝟎𝟎 𝑘=𝟗𝟎𝟎𝟏 … + 병렬처리가 불가능한 경우 - Loop에서 앞의 계산값이 필요한 경우 피보나치 수열(Fibonacci Sequence)
  6. 6. 2014-04-23 6 윤석준 (icysword@nate.com) 병렬 프로그래밍 기법 ① Core 내부 병렬 프로그래밍 ② Thread 병렬 프로그래밍 ③ Process 병렬 프로그래밍 ④ GPGPU를 이용한 병렬 프로그래밍
  7. 7. 2014-04-23 7 윤석준 (icysword@nate.com) Core 내부 병렬 프로그램 SIMD (Single Instruction Multiple Data) int a = 1 + 2; int b = 3 + 4; int c = 5 + 6; int d = 7 + 8; SISD 1 2a = + 3 4b = + 5 6c = + 7 8d = + SIMD 1 3 5 7 2 4 6 8= +a b c d • 기본적인 사칙 연산만 가능 • 별도의 Memory 할당 필요 • 제한된 Registor 개수
  8. 8. 2014-04-23 8 윤석준 (icysword@nate.com) Thread 병렬 프로그램 • OpenMP • pthreads • Parallel Pattern Library • 멀티스레딩 프로그램 Loop 병렬화 Section 병렬화
  9. 9. 2014-04-23 9 윤석준 (icysword@nate.com) Process 병렬 프로그램 • MPI • HPF • PVM
  10. 10. 2014-04-23 10 윤석준 (icysword@nate.com) GPGPU 병렬 프로그램
  11. 11. 2014-04-23 11 윤석준 (icysword@nate.com) GPGPU 병렬 프로그램 Floating-Point Operations per Second for the CPU and GPU ● GTX 770 : 3.2 Tera FLOPs ● i7 : 141 Giga FLOPs 22.6배
  12. 12. 2014-04-23 12 윤석준 (icysword@nate.com) GPGPU 병렬 프로그램 Memory Bandwidth for the CPU and GPU ● GTX 770 : 224.3 GB/s ● i7 : 25.6 GB/s 8.8배
  13. 13. 2014-04-23 13 윤석준 (icysword@nate.com) CUDA란 ? (Compute Unified Device Architecture) • 2006년 11월 GeForce 8800 GTX 이후 생산되는 GPU • Geforce : 일반적인 Graphic Card • Quadro : 고성능의 Graphic 작업 전용 • Tesla : Graphic 기능 없이 고성능 연산 전용
  14. 14. 2014-04-23 14 윤석준 (icysword@nate.com) CPU vs GPU The GPU Devotes More Transistors to Data Processing
  15. 15. 2014-04-23 15 윤석준 (icysword@nate.com) CUDA Hardware Archetecture • SM (Streaming Multiprocessor) • CUDA Core (Streaming Processor)
  16. 16. 2014-04-23 16 윤석준 (icysword@nate.com) CUDA Data Parallel Threading Model • Block : 작업단위 (SM) • Warp : SM 내에서 동시 실행 가능한 Thread 개수 • Grid : Block 의 집합 • Thread : Block 안에서의 병렬화 (CUDA Core)
  17. 17. 2014-04-23 17 윤석준 (icysword@nate.com) Structure of CUDA Memory • Registor - On Chip Processor 에 있는 Memory - 함수내의 Local 변수 (배열은 Global) - 가장 빠른 메모리 • Shared Memory - On Chip Processor 에 있는 Memory - SM 내의 Thread 들이 공유 - L1 캐시급 속도 • Constant Memory - 읽기전용 캐시 - Write (from DRAM) : 400 ~ 600 Cycles - Read : Registor와 동급 • Global Memory - Video Card에 장착된 DRAM - Read/Write : 400 ~ 600 Cycles • Texture Memory - 캐시 읽기를 지원하는 Global Memory - 설정 후 읽기전용 Register Shared Memory Constant Memory Global Memory Texture Memory
  18. 18. 2014-04-23 18 윤석준 (icysword@nate.com) CUDA Streaming • 연산 속도에 비해 Host DRAM 과 GPU DRAM의 Data 전송속도가 느림 • 큰 Data를 가공할 경우 연산시간보다 Data 전송시간의 비중이 더 커짐 • Data 전송 및 연산시간을 작은 단위로 나눠서 순차적으로 진행
  19. 19. 2014-04-23 19 윤석준 (icysword@nate.com) CUDA Library • cuRAND : 랜덤수 생성기 (CUDA Random Number Generation library) • CUFFT : FFT 연산 Library (CUDA Fast Fourier Transform library) • CUBLAS : 선형대수학 연산 Library (CUDA Basic Linear Algebra Subroutines library)
  20. 20. 2014-04-23 20 윤석준 (icysword@nate.com) CUDA Programming 예제 float fResult[1024][1000]; float fData[1024][1000]; for (int i = 0; i < 1024; i++) { for (int j = 0; j < 1000; j++) { for (int k = 0; k < 33; k++) { fResult[i][j] += Calc(fData[i][j], k); } } } int main() { … float *dev_fResult, *dev_fData; int iSizeData = 1024 * 1000 * sizeof(float); cudaMalloc((void**)&dev_fResult, iSizeData); cudaMemset(dev_fResult, 0, iSizeData); cudaMalloc((void**)&dev_fData, iSizeData); cudaMemcpy(dev_fData, fData, iSizeData, cudaMemcpyHostToDevice); KernelFunc<<<1024, 1000>>>(dev_fResult, dev_fData); float* fResult = new float[1024 * 1000]; cudaMemcpy(fResult, dev_fResult, iSizeData, cudaMemcpyDeviceToHost); cudaFree(dev_fResult); cudaFree(dev_fData); … } // 커널함수 : CPU에 의해 호출되어 // GPU에서 실행 // Device 함수 : GPU에서 실행 // Host 함수 : CPU에서 실행 // Atomic 연산 : Mutal Exclusion // Device 메모리 할당 // Kernel 함수 호출 // Host 메모리 할당 __global__ void KernelFunc(float* i_fResult, float* i_fData) { float fResult = 0.0f; int index = blockIdx.x * gridDim + threadIdx.x; float fData = i_fData[index]; for (int k = 0; k < 33; k++) { fResult += Calc(fData, k); } i_fResult[index] = fResult; }
  21. 21. 2014-04-23 21 윤석준 (icysword@nate.com) CUDA Compute capability (version) http://en.wikipedia.org/wiki/CUDA . . . Technical specifications Compute capability (version) 1 1.1 1.2 1.3 2.x 3 3.5 5 8800 GTX 8400M GT GTS 350M GTX 280 GTX 550 GTX 770 GTX TITAN GTX 750 Maximum dimensionality of grid of thread blocks 2 3 Maximum x-, y-, or z-dimension of a grid of thread blocks 65535 231 -1 Maximum dimensionality of thread block 3 Maximum x- or y-dimension of a block 512 1024 Maximum z-dimension of a block 64 Maximum number of threads per block 512 1024 Warp size 32 Maximum number of resident blocks per multiprocessor 8 16 32 Maximum number of resident warps per multiprocessor 24 32 48 64 Maximum number of resident threads per multiprocessor 768 1024 1536 2048 Number of 32-bit registers per multiprocessor 8 K 16 K 32 K 64 K Maximum number of 32-bit registers per thread 128 63 255 Maximum amount of shared memory per multiprocessor 16 KB 48 KB 64 KB
  22. 22. 2014-04-23 22 윤석준 (icysword@nate.com) CUDA 6.0 : Unified Memory http://devblogs.nvidia.com/parallelforall/unified-memory-in-cuda-6
  23. 23. 2014-04-23 23 윤석준 (icysword@nate.com) CUDA 적용 사례 : 성공 1 • Beam Pattern 생성 - 1000 방위 x 1000 주파수Bin - 100개 Sensor ( 각 방위별 BeamPattern 생성) - Data 전달 없음 CPU : 32 s (OpenMP) CUDA : 0.26 s 123배
  24. 24. 2014-04-23 24 윤석준 (icysword@nate.com) CUDA 적용 사례 : 성공 2 • 타겟 신호 에 Beam Pattern 적용 - 192 방위 x 1000 주파수Bin - 16타겟 - Data Read/Write : 192 x 1000 x floatComplex x 2 (LOFAR/DEMON) CPU : 900 ms (OpenMP) CUDA : 14 ms 64배
  25. 25. 2014-04-23 25 윤석준 (icysword@nate.com) CUDA 적용 사례 : 실패 • Cubic Spline Interoplation CPU 연산에 비하여 성능 향상이 없음 … Xi(14) Xi(15) Xi(16) … Xo(n) Xo(n+1) - 입력 된 각각의 점들에 대하여 사용될 각종 변수들 계산 : Sequential Operation - 출력값 연산 : 병렬화 가능은 하나 해당 위치를 찾을 시 Sequential에 비해 검색 시간이 느림
  26. 26. 2014-04-23 26 윤석준 (icysword@nate.com) 최근 병렬화 이슈 • Raspberry-Pi - 700 Mhz ARM11 CPU - Broadcom Videocore IV GPU - 256 Mbytes RAM - 10.13 GFLOPs - i7 : 141 GFLOPs - 슈퍼컴퓨터 ‘천둥’ : 107 TFLOPs http://www.raspberrypi.org
  27. 27. 2014-04-23 27 윤석준 (icysword@nate.com) 최근 병렬화 이슈 • Multi-GPU Motherboard http://prod.danawa.com/info/?pcode=2466508&cate1=861&cate2=875&cate3=968&cate4=0

×