본문 바로가기

dev_AI_framework

기존 컴퓨터에선 행렬 연산을 어떻게 처리하는가?? ( 결과 누적 방식 )

🎯 당신이 말한 두 가지 방식

✔ 방식 1: C의 각 원소 하나씩 직접 계산

  • 루프 순서: i,ji, j 에 대해 CijC_{ij} 를 순차적으로 계산
  • 내부적으로는 Ai,:⋅B:,jA_{i,:} \cdot B_{:,j} 내적
  • C의 각 위치가 중심

→ ✅ 직관적, 학습 단계에서 가장 많이 쓰이는 방식
→ ❌ 캐시 비효율, 병렬화 어려움

 

✔ 방식 2: A와 B의 원소를 기준으로 C의 부분값에 누적

  • 루프 순서: i,k,ji, k, j
  • 즉, A의 한 원소 AikA_{ik} 가 B의 한 row와 곱해져서 C의 한 row에 영향을 줌

→ ✅ 실제로 CPU/GPU 최적화에서 더 많이 사용됨
→ ✅ 메모리 접근 최적화, 병렬성 활용 쉬움
→ ❌ 개념적으로 덜 직관적일 수 있음

 

🧠 GPU에서의 행렬 곱은?

CUDA나 cuBLAS에서는:

  • 행렬을 작은 타일(block) 단위로 나누고,
  • shared memory에 올려놓고, tile 단위의 곱셈과 누적 연산을 수행
  • 결국: C[i][j] 의 위치를 중심으로 계산하기보다는,
    A와 B의 블록이 가져오는 값들로 C의 블록을 점진적으로 누적 구성