진짜 기가 막힌 거 발견
ㄹ ㅣ ㅌ ㅓ ㄴ << 이거 한글로 쓰면 velog에서 자체 비공개 처리를 함
왜지....? ㄷ ㅗ ㅂ ㅏ ㄱ 관련이라 그런가 암튼 return으로 바꾸니 해결됨
앞으로 글 쓸때 조심할 것
병렬화 된 스레드 안에서 병렬화 함수를 재호출
Nested Parallelism
커널에서 커널 함수 호출 (동일 디바이스)
cc 3.5 이상, 최대 Nesting Depth는 24
블록과 그리드의 크기를 코드 실행 중 결정 가능
유동적 해석에서의 동적 병렬화
옵션
$ nvcc -arch=sm_70 -rdc = true src.cu -o src-lcudadevrt
-rdc = true
-lcudadevrt
장단점
Example
int nthreads = iSize/2
, iDepth += 1
1. Managing Memory
Standard C vs CUDA C
GPU memory Allocation / Release
size
바이트 크기의 메모리 할당하고 *devPtr
포인터 리턴count
바이트를 value
로 초기화2. Data Copy
cudaMemcpy()
cudaMemcpyAsync()
활용cudaMemcpyKind
cudaMemcpyHostToHost
: Host -> HostcudaMemcpyHostToDevice
: Host -> DevicecudaMemcpyDeviceToHost
: Device -> HostcudaMemcpyDeviceToDevice
: Device -> DevicecudaMemcpyDefault
: dst, src 변수 기초로 시스템이 자동으로 결정 (recommended)Chapter 5는 Example 2개 (Summing Vector / Matrices) 다룸
- GPU에 넘기는 게 오히려 비효율적일 수 있음
ex.cudaMemcpy()
시간 > 연산 시간- grid, block size 설정에 따라 성능이 상이함
- 효율적인 프로그램을 위한 가이드라인
block size = Warp(32)* n (스레드 낭비 X)
block size >= 64 (128 ~ 256 recommended)
-> 다음 포스트는 Chapter 6 부터 시작