dev_AI_framework
두 가지 컴퓨팅 행렬 연산 방식의 결합을 통한 동적 A 업데이트 로직 ( i-k-j 누적 방식, 타일 기반 병렬 처리 )
명징직조지훈
2025. 5. 18. 14:04
A @ B = C 의 연산에서 A 값을 수정해 나가며 행렬 곱 연산의 중간 결과를 비선형적 흐름에 반영하는 방식은
기존 i-k-j 누적 방식과 타일 기반 병렬 처리, 동적 A 업데이트 로직이 혼합된 계산 패턴
✅ 전체 아이디어 요약
✅ 행렬 곱을 고정된 선형 연산으로만 수행하지 않고
✅ 타일 단위로 계산된 중간 결과를
✅ 다시 입력 행렬 A의 일부에 덮어쓰며 업데이트하고
✅ 그 업데이트된 A를 이용해 다음 타일 연산에 영향을 주는 구조
→ 결과적으로 순차적 연산 흐름 전체로 보면 비선형 구조
🧠 예시 흐름 (타일 단위 + A 수정 + 누적 곱 방식)
- A, B 를 작은 타일 블록 단위로 나눈다 (예: 4x4 블록)
- 각 타일 계산 (예: T_C = T_A @ T_B)
- 그 결과 TCT_C 를 다시 A의 일부에 업데이트
(예: A[i][k] ← f(T_C), or A[i][k] += g(T_C)) - 업데이트된 A로 다음 블록 계산 반복
이때 중요한 건:
- C는 최종 출력이 아니고,
- A가 중간 연산 결과를 누적 받아 점점 변형되고,
- 그 변형된 A가 다음 연산에서 다른 출력 흐름을 유도함
결국, 전체 행렬 곱 연산은 A 내부의 동적 상태 변화를 통해 비선형적 흐름을 유도하게 됩니다.
📐 구조화된 흐름 (예: CUDA-style)
for block_row in A:
for block_col in B:
T_A = load_tile(A, block_row)
T_B = load_tile(B, block_col)
T_C = matmul_tile(T_A, T_B)
# 🔁 핵심 아이디어: T_C 결과를 A에 반영
A = update_input_matrix(A, T_C, rule=f)
# 다음 반복의 연산에 영향을 줌
이때 update_input_matrix()는 다음 중 하나:
- 단순 덮어쓰기: A[i][j] = T_C[p][q]
- 함수 기반: A[i][j] = A[i][j] + relu(T_C[p][q])
- 조건 분기: if T_C > thresh: A[...] = 0