개발새발

2D Convolution +General Matrix Multiply (GEMM) 본문

임베디드시스템

2D Convolution +General Matrix Multiply (GEMM)

비숑주인 2024. 11. 20. 13:03

CNNs와 CUDA 프로그래밍: 핵심 개념과 최적화 전략

1. CNNs: Convolutional Neural Networks

  • CNN은 시각적 이미지를 분석하는 데 가장 널리 사용되는 인공신경망의 한 종류이다.
  • 주요 구성 요소:
    • Convolutional Layers: 입력 이미지에서 특징을 추출.
    • Pooling Layers: 공간 크기를 줄이고 연산량을 감소.
        • 모든 입력 뉴런과 출력 뉴런이 완전히 연결.
        • 네트워크의 마지막 부분에 위치하며, 분류 또는 회귀 같은 최종 작업을 수행.Fully Connected Layer(완전 연결층):
      • 이전 레이어에서 추출된 고차원 특징을 기반으로 최종 출력을 계산. 

2. im2col: Lowering 기법

  • 문제점: 모든 이미지를 필터로 슬라이드하는 다중 루프는 매우 느리다.
  • 해결책: im2col은 입력 데이터를 펼쳐 행렬로 변환하고, 행렬 곱셈(GEMM)을 사용하여 컨볼루션을 수행하는 방식이다.
  • 장점:
    • 효율적인 메모리 접근.
    • 고성능 라이브러리를 활용한 빠른 연산.

 

3. TB: Thread Blocks

  • Thread Block:
    • CUDA에서 사용되는 프로그래밍 추상화로, 여러 개의 스레드 그룹을 나타냄.
    • 스레드는 직렬 또는 병렬로 실행 가능하며, 효율적인 프로세스 및 데이터 매핑을 위해 Thread Block으로 묶인다.
  • SIMT(Single Instruction Multiple Threads):
    • 모든 스레드는 동일한 명령어를 실행하며, Warp 단위(보통 32개의 스레드)로 나뉘어 실행된다.

Thread Block는 소프트웨어, Warp은 하드웨어다. 

 

 

  • 쓰레드 블록: 프로그래밍 모델 상의 병렬 작업 단위로, 공유 메모리 사용, 동기화를 통한 데이터 협력 및 스케일 아웃을 위한 추상화 레벨 제공.
  • 워프: 하드웨어가 실제 명령어 실행을 관리하는 최소 단위로, 효율적인 명령어 발행과 실행을 위해 존재. 워프 레벨에서 명령어가 발행되므로, 쓰레드 다이버전스(divergence)가 발생하면 워프 내에서 비효율성이 생길 수 있다.

 

 

4. 최적화 전략

  • Thread Block 설계:
    • Thread Block과 Grid 크기를 조정하여 자원 활용을 극대화.
  • 배치 처리(Batch Inference):
    • 여러 입력 데이터를 한 번에 처리하여 병렬성을 극대화.
    • 효과: 비배치 처리보다 훨씬 빠른 결과를 도출.

5. 실습 예제: 행렬 곱셈 CUDA 구현

  • 목표:
    1. CPU와 GPU에서 행렬 곱셈 구현.
    2. GPU의 병렬성을 활용하여 성능 개선.
  • 단계:
    1. 입력 행렬을 호스트에서 디바이스로 복사.
    2. Thread Block과 Grid 크기 설정.
    3. CUDA 커널을 작성하여 행렬 곱셈 수행.
    4. 결과를 디바이스에서 호스트로 복사.
    5. CPU 결과와 비교하여 정확성 검증.

 

'임베디드시스템' 카테고리의 다른 글

Unified Virtual Memory (UVM)  (2) 2024.12.13
Synchronous vs. Asynchronous  (0) 2024.11.27
Profiling + Batch  (1) 2024.11.13
mnist (GPU)  (0) 2024.11.06
Fully-Connected MNIST NN (CPU)  (0) 2024.10.30