임베디드시스템

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 결과와 비교하여 정확성 검증.