🎯 당신이 말한 두 가지 방식
✔ 방식 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의 블록을 점진적으로 누적 구성
'dev_AI_framework' 카테고리의 다른 글
실제에서 적용 방안, 계산 그래프의 단일 행렬 연산으로의 표현 (0) | 2025.05.18 |
---|---|
두 가지 컴퓨팅 행렬 연산 방식의 결합을 통한 동적 A 업데이트 로직 ( i-k-j 누적 방식, 타일 기반 병렬 처리 ) (0) | 2025.05.18 |
비선형 연산의 행렬 내 선형 연산의 조합으로 구현 (0) | 2025.05.18 |
요약 정리 : 행렬 기반 계산 그래프 IR (0) | 2025.05.17 |
왜 이러한 IR 표현이 필요한가. (0) | 2025.05.17 |