GPU Architecture, CUDA Compiler
CUDA

GPU Architecture, CUDA Compiler

๐Ÿ’ก ๊ณ„์ธต ์šฉ์–ด

  • SM(Stream Processor): GPU์˜ ์ฝ”์–ด
  • Single Precision: 4byte๋กœ ํ‘œ์‹œ๋˜๋Š” ๋ฐ์ดํ„ฐ
  • Double Precision: 8byte๋กœ ํ‘œ์‹œ๋˜๋Š” ๋ฐ์ดํ„ฐ
  • ์ปค๋„: CPU์—์„œ GPU๋กœ ๋ณด๋‚ด๋Š” ๋ถ€๋ถ„์˜ ๋‹จ์œ„, ์ปค๋„ ์•ˆ์— ๊ทธ๋ฆฌ๋“œ๊ฐ€ ๋“ค์–ด์žˆ์Œ
  • ๊ทธ๋ฆฌ๋“œ: ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ธ”๋ก์œผ๋กœ ์ด๋ฃจ์–ด์ง
  • ๋ธ”๋ก: ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์Šค๋ ˆ๋“œ๋กœ ์ด๋ฃจ์–ด์ง
  • ์Šค๋ ˆ๋“œ: ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ๊ณต์œ , ๋ธ”๋ก ๋‚ด์—์„œ ์‹คํ–‰ ๋™๊ธฐํ™”
  • ์ปค๋„์ด ์‹คํ–‰๋˜๋ฉด SM์— ์Šค๋ ˆ๋“œ ๋ธ”๋ก์ด ๋ถ„๋ฐฐ๋˜์–ด ์‹คํ–‰๋จ
  • ํ•˜๋‚˜์˜ SM์— ์—ฌ๋Ÿฌ ๋ธ”๋ก์ด ๋Œ€์‘๋จ
  • ๋ธ”๋ก ์ˆ˜๋Š” ์ฝ”์–ด์˜ ๊ฐœ์ˆ˜๋ณด๋‹ค ๋งŽ์•„์•ผ ํ•จ(๋ธ”๋ก ์ˆ˜ > ์ฝ”์–ด ๊ฐœ์ˆ˜)
  • ์Šค๋ ˆ๋“œ๋ฅผ ์ฝ”์–ด์— ํ• ๋‹นํ•  ๋•Œ ์›Œํ”„ ๋‹จ์œ„๋ผ๋Š” ๊ฒƒ์„ ํ†ตํ•ด ์Šค์ผ€์ค„๋ง์„ ํ•ด์„œ ๋ชจ๋“  ์Šค๋ ˆ๋“œ๊ฐ€ ์ˆ˜ํ–‰๋˜๋„๋ก ํ•จ
  • 1 Warp = 32 Threads

 

๐Ÿ’ก nvcc

CUDA Compiler, ํ™•์žฅ์ž cu๋ฅผ ๊ฐ€์ง„ CUDA ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ

nvidia-smi: ๋‚ด๊ฐ€ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ์žฅ์น˜์— ๋Œ€ํ•œ ์ •๋ณด

  • -x{c | c++ | cu}: ์†Œ์Šค ํŒŒ์ผ์˜ language๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •
  • -G: device code์— ๋Œ€ํ•œ debug ์ •๋ณด๋ฅผ ์ƒ์„ฑ
  • -arch: NVIDIA GPU architecture๋ฅผ ์ง€์ •(-arch=sm_70), ์„ฑ๋Šฅ์„ ์›ํ•˜๋Š” ์•„ํ‚คํ…์ฒ˜์— ๋งž๊ฒŒ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ ์˜ต์…˜์„ ๋ถ™์ด๋Š”๊ฒŒ ์ข‹์Œ
  • -maxrregcount: ์ปค๋„์ด ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ ˆ์ง€์Šคํ„ฐ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ง€์ •
  • -fmad: multiply-add์˜ ๊ธฐ๋Šฅ์„ ํ™œ์„ฑ/๋น„ํ™œ์„ฑํ™” ํ•จ, default๋Š” true
  • -dlcm: L1 cache ์‚ฌ์šฉ ์—ฌ๋ถ€๋ฅผ ์ง€์ •, default๋Š” ca(L1+L2 cache), cg(L2 cache)
  • --ptxas-options=-v or -Xptxas=-v: ์ปดํŒŒ์ผ ์‹œ ๊ฐ„๋žตํ•œ ์ •๋ณด๋ฅผ ๋ณด์—ฌ์คŒ
  • -Xcompiler: ์ปดํŒŒ์ผ๋Ÿฌ/preprocessor์— ์ง์ ‘ ์˜ต์…˜์„ ์ง€์ •
  • -Xlinker: ํ˜ธ์ŠคํŠธ ๋ง์ปค์— ์ง์ ‘ ์˜ต์…˜์„ ์ง€์ •

๐Ÿ’ก Handling

CPU๋ž‘ CUDA๋Š” ํ•˜๋“œ์›จ์–ด์ ์œผ๋กœ ๋ถ„๋ฆฌ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— CPU๊ฐ€ GPU ์ชฝ์˜ ์ปค๋„์„ ํ†ตํ•ด์„œ ์ž‘์—…์„ ๋„˜๊ฒจ์ฃผ๋ฉด CPU์—์„œ๋Š” GPU๋ฅผ ์ปจํŠธ๋กคํ•  ์ˆ˜ ์—†๋‹ค. ๊ทธ๋ž˜์„œ GPU ์•ˆ์—์„œ ์ž‘์—…๋ฌผ์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ์˜ ์„ฑ๊ณต ์—ฌ๋ถ€๋ฅผ ํŒ๋ณ„ํ•˜๊ธฐ ์œ„ํ•ด ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๊ฐ€์ง€๊ณ  ์—๋Ÿฌ ์—ฌ๋ถ€๋ฅผ ํŒ๋ณ„ํ•œ๋‹ค.

  • __host____device__const char*cudaGetErrorName(cudaError_terror): ์—๋Ÿฌ ์ฝ”๋“œ์˜ ์ด๋ฆ„์„ ๋ฐ˜ํ™˜
  • __host____device__const char*cudaGetErrorString(cudaError_terror): ์—๋Ÿฌ ์ฝ”๋“œ์˜ ๋‚ด์šฉ์˜ ๋ฐ˜ํ™˜
  • cudaSuccess: ์—ฐ์‚ฐ์˜ ์„ฑ๊ณต์„ ๋‚˜ํƒ€๋ƒ„

 

๊ฐ•์˜

kisti.re.kr

'CUDA' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

Thread Hierarchy, CUDA Kernel  (4) 2024.02.14
CUDA, ๋ณ‘๋ ฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ  (0) 2024.02.13