CUDA

    Thread Hierarchy, CUDA Kernel

    💡 Thread Hierarchy 커널 함수가 호스트에서 호출될 때, 많은 수의 스레드가 생성됨 스레드 계층 구조는 스레드 블록과 그리드로 구성됨 어떤 스레드가 어떤 데이터를 처리할지 인덱싱을 해주는게 프로그래머가 해야할 역할임 그리드와 스레드 블록의 크기는 두 개의 built-in 변수를 이용하여 구할 수 있음 gridDim:그리드 크기(그리드 내의 블록의 수), gridDim.x, gridDim.y, grindDim.z blockDim: 블록의 크기(블록 내의 스레드의 수), blockDim.x, blockDim.y, blockDim.z blockIdx: 그리드 내에서 블록 인덱스 threadIdx: 블록 내에서 스레드 인덱스 데이터의 개수=스레드의 개수= 블록의 크기 * 그리드의 크기 나누어 떨어지..

    GPU Architecture, CUDA Compiler

    💡 계층 용어 SM(Stream Processor): GPU의 코어 Single Precision: 4byte로 표시되는 데이터 Double Precision: 8byte로 표시되는 데이터 커널: CPU에서 GPU로 보내는 부분의 단위, 커널 안에 그리드가 들어있음 그리드: 여러 개의 블록으로 이루어짐 블록: 여러 개의 스레드로 이루어짐 스레드: 공유 메모리 통해 데이터 공유, 블록 내에서 실행 동기화 커널이 실행되면 SM에 스레드 블록이 분배되어 실행됨 하나의 SM에 여러 블록이 대응됨 블록 수는 코어의 개수보다 많아야 함(블록 수 > 코어 개수) 스레드를 코어에 할당할 때 워프 단위라는 것을 통해 스케줄링을 해서 모든 스레드가 수행되도록 함 1 Warp = 32 Threads 💡 nvcc CUDA C..

    CUDA, 병렬 프로그래밍

    💡CUDA CUDA(Computed /unified Device Architecture)는 NVIDIA에서 개발한 GPU 개발 툴로 고성능 환경과 GPU 가속기 환경을 위한 개발 툴이다. CUDA는 CPU가 계산을 하는 부분에서 특정 영역을 GPU 가속기에 할당해서 가속기 쪽에서 처리를 해주는 모델로 구성돼있다. NVIDIA에서 생산한 GPU 제품군에서만 사용이 가능하다. 일반적으로 Serial 코드에서는 어떤 계산을 수행할 때 코어 하나가 순차적으로 프로그램의 순서에 따라서 계산을 수행하지만, CUDA같은 경우에는 CPU쪽에서 계산을 하다가 중간에 루프나 hostpot 같은 부분을 할당 받아서 독립적으로 수행하고 그 결과 값을 return해주는 구조로 계산이 진행된다. 💡Heterogeneous Sys..