CuBLAS

From HPCWIKI
Jump to navigation Jump to search

cuBLAS

Template:Status

Template:TOC

Overview

cuBLAS는 NVIDIA의 선형대수 라이브러리. 행렬 곱셈, LU 분해, SVD 등 GPU 가속 연산. 딥러닝의 핵심.

Summary

  • * 무엇인가? NVIDIA GPU 선형대수 라이브러리. 행렬 연산 가속
  • * 왜 필요한가? 딥러닝은 행렬 연산이 핵심. GPU로 10-100x 가속
  • * 언제 사용하는가? 딥러닝, 과학 계산, 이미지 처리

---

Purpose

이 문서가 존재하는 이유

  • Goal: cuBLAS의 개념, 사용법, 설정 가이드 제공
  • Scope: 기본 개념, 설치/설정, 사용 예제, 모범 사례
  • Non-goals: 고급 커스터마이징, 내부 소스 코드 분석

---

Key Concepts

Template:KeyConcepts

---

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

---

Related Pages