Linux에서 Cuda 다루기

Hyoeun·2022년 9월 14일
0

대규모병렬컴퓨팅

목록 보기
2/2
post-thumbnail

Cuda-capable한 GPU가 없다면 GCP로 인스턴스(VM) 생성 참조

sudo apt install nvidia-cuda-toolkit

  • nvcc(nvidia cuda compiler)를 비롯한 toolkit

nvidia-smi

  • cuda 버전 확인

nvcc -V

  • nvcc 버전 확인

GPU compute capability 확인

NVCC (nvidia cuda compiler)

  • 각 compute capability 별로 컴파일 방식이 다름
  • 모든 compute capability를 지원하려면 컴파일 시간, exe파일 크기 증가 등의 문제 발생
  • -arch, -code 옵션 사용
  • -arch
    • -arch=compute_75와 같이 사용
    • 생성될 PTX(Parallel Thread Execution) 코드의 버전 지정
  • -code
    • -code=sm_75와 같이 사용
    • 생성될 binary 코드의 버전 지정
  • alias를 통해 argue를 주려 했으나 Makefile을 써보기로 했다.
  • 참고

Makefile

CC = nvcc
CXXFLAGS = -arch=compute_75 -code=sm_75,compute_75 -o
%.out : %.cu
	$(CC) $(CXXFLAGS) $@ $<
	./$@

clean :
	rm -rf *.out

cudaDeviceSynchronize()

  • cuda 연산과 cpu 연산이 동기화 되지 않아 출력되지 않는 문제 발생
  • cuda 연산 수행 후 cudaDeviceSynchronize()실행
__global__ void func(){
...
}

int main(){
...
func<<<n,n>>>(); // cuda 연산
cudaDeviceSynchronize(); // cuda 연산이 끝날 때까지 wait
...
}

0개의 댓글