CuBLAS
Jump to navigation
Jump to search
cuBLAS
Overview
cuBLAS는 NVIDIA의 선형대수 라이브러리. 행렬 곱셈, LU 분해, SVD 등 GPU 가속 연산. 딥러닝의 핵심.
Summary
- * 무엇인가? NVIDIA GPU 선형대수 라이브러리. 행렬 연산 가속
- * 왜 필요한가? 딥러닝은 행렬 연산이 핵심. GPU로 10-100x 가속
- * 언제 사용하는가? 딥러닝, 과학 계산, 이미지 처리
---
Purpose
이 문서가 존재하는 이유
- Goal: cuBLAS의 개념, 사용법, 설정 가이드 제공
- Scope: 기본 개념, 설치/설정, 사용 예제, 모범 사례
- Non-goals: 고급 커스터마이징, 내부 소스 코드 분석
---
Key Concepts
---
Architecture
cuBLAS는 CUDA 위에 구축. cuBLASLt(Library Turbo)로 최신 아키텍처 최적화. cuBLAS XJ로 혼합 정밀도 지원. cuBLAS는 PyTorch/TensorFlow 내부에서 사용.
---
Workflow
1. 1. CUDA Toolkit 설치 (cuBLAS 포함)
2. 2. cuBLAS 헤더 링크 (-lcublas)
3. 3. GEMM 호출
4. 4. 성능 튜닝 (cuBLASLt)
5. 5. PyTorch/TensorFlow 연동
---
Configuration
#include <cublas_v2.h>
#include <stdio.h>
int main() {
cublasHandle_t handle;
cublasCreate(&handle);
int M = 1024, N = 1024, K = 1024;
float alpha = 1.0f, beta = 0.0f;
float *A = (float*)malloc(M * K * sizeof(float));
float *B = (float*)malloc(K * N * sizeof(float));
float *C = (float*)malloc(M * N * sizeof(float));
float *d_A, *d_B, *d_C;
cudaMalloc(&d_A, M * K * sizeof(float));
cudaMalloc(&d_B, K * N * sizeof(float));
cudaMalloc(&d_C, M * N * sizeof(float));
cudaMemcpy(d_A, A, M * K * sizeof(float), cudaMemcpyHostToDevice);
cudaMemcpy(d_B, B, K * N * sizeof(float), cudaMemcpyHostToDevice);
cublasSgemm(handle, CUBLAS_OP_N, CUBLAS_OP_N, M, N, K, &alpha, d_A, M, d_B, K, &beta, d_C, M);
cudaMemcpy(C, d_C, M * N * sizeof(float), cudaMemcpyDeviceToHost);
cudaFree(d_A); cudaFree(d_B); cudaFree(d_C);
free(A); free(B); free(C);
cublasDestroy(handle);
return 0;
}
---
Best Practices
- cuBLASLt로 최신 아키텍처 최적화
- 배치 GEMM으로 처리량↑
- PyTorch/TensorFlow가 cuBLAS 자동 사용
- mixed precision (FP16)으로 속도↑
---
Limitations
- NVIDIA GPU 전용
- 대형 행렬만 효율적 (1000x1000+)
- 소형 행렬은 CPU가 더 빠를 수 있음
---
References
---