dev_AI_framework

두 가지 컴퓨팅 행렬 연산 방식의 결합을 통한 동적 A 업데이트 로직 ( i-k-j 누적 방식, 타일 기반 병렬 처리 )

명징직조지훈 2025. 5. 18. 14:04

A @ B = C  의 연산에서 A 값을 수정해 나가며 행렬 곱 연산의 중간 결과를 비선형적 흐름에 반영하는 방식은

기존 i-k-j 누적 방식과 타일 기반 병렬 처리, 동적 A 업데이트 로직이 혼합된 계산 패턴

 

✅ 전체 아이디어 요약

✅ 행렬 곱을 고정된 선형 연산으로만 수행하지 않고
 타일 단위로 계산된 중간 결과
✅ 다시 입력 행렬 A의 일부에 덮어쓰며 업데이트하고
✅ 그 업데이트된 A를 이용해 다음 타일 연산에 영향을 주는 구조

→ 결과적으로 순차적 연산 흐름 전체로 보면 비선형 구조

 

🧠 예시 흐름 (타일 단위 + A 수정 + 누적 곱 방식)

  1. A, B 를 작은 타일 블록 단위로 나눈다 (예: 4x4 블록)
  2. 각 타일 계산 (예: T_C = T_A @ T_B)
  3. 그 결과 TCT_C 를 다시 A의 일부에 업데이트
    (예: A[i][k] ← f(T_C), or A[i][k] += g(T_C))
  4. 업데이트된 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