공통 작업 흐름
① handle 생성
② 메모리 관련 설정
③ 변수 할당
④ 커널 통해 라이브러리 실행
⑤ 계산 완료
⑥ 관련 자원 반환
1. Host / Device side
Host-side CPU Library
Device(GPU) header file
#include <curand_kernel.h>
난수 생성: device
난수 생성: host
2. 연산 순서
① generator 생성
curandCreateGenerator()
사용② generator 옵션 설정
curandSetPseudoRandomGeneratorSeed()
를 이용하여 seed 설정③ 디바이스 메모리 할당
④ 난수 생성
curandGenerate()
혹은 다른 생성 함수 이용⑤ 결과 이용
⑥ Clean Up
curandDestroyGenerator()
사용호스트에서의 난수 생성
3. Host API
Return Values
curandStatus_t
의 반환값을 가짐CURAND_STATUS_SUCCESS
를 반환Generation Functions
curandGenerateUniform()
: 범위 내의 모든 난수들이 동일한 확률을 가짐curandGenerateNormal()
: 범위 내의 난수들이 정규 분포 형태의 확률을 가짐
Generation Function 뒤에 'Double'을 붙이면 Single-precision이 아닌 Double-precision의 정밀도로 난수 생성 가능
개요
#include <cublas_v2.h>
Error Status
cublasStatus_t
를 returnCUBLAS_STATUS_SUCCESS
cuBLAS context
cublasCreate()
함수를 이용하여 cuBLAS library context에 대한 handle을 초기화cublasDestroy()
를 이용하여 리소스 해제1. Vector Format
두 개의 배열
2. Matrix Format
여러 표현 방식
cusparseXcoo2csr
, cusparseXcsr2coo
로 상호 변환COO
CSR
3. 실행
cusparseHandle_t
cuSPARSE context에 대한 포인터 타임
cusparseCreate()
/ cusparseDestroy()
cusparseCreate()
로 미리 초기화cusparseCreate()
에서 return된 handle은 다른 함수에서 사용됨cusparseDestroy()
로 handle 해제 필수cusparseMatDescr_t
cusparseCreateMatDescr()
, cudasparseDestroyMatDescr()
을 사용하여 matrix descriptor를 초기화 및 해제cusparseSetMatType()
, cusparseSetMatIndexBase()
를 사용하여 descriptor의 값을 변경1. Intro
고수준 패키지
cuSolver API
cuSolverMG API
2. cuSolverSP
Naming Conventions
비동기 실행
cudaDeviceSynchronize()
로 강제 동기화1. Intro
CUDA version of STL
기능
2. Reduction
Reduction Algorithm
#include <thrust/reduce.h>
#include <thrust/device_vector.h>
thrust::reduce
int sum=thrust::reduce(D.begin(), D.end(), (int) 0, thrust::plus());