currybab's devlog

Tinygrad Unroll vs Upcast

1. Unroll (루프 펼치기)

2. Upcast (업캐스팅)

요약:

특징Unroll (루프 펼치기)Upcast (업캐스팅)
주 목적커널 내 루프 최적화, 반복 횟수 풀어내어 루프 오버헤드 감소스레드당 작업량 증가, 메모리 효율 증대, 여러 요소를 동시에 처리하여 작업 밀도를 높임
작동 방식루프 본문 코드를 명시적으로 반복, 반복문 제거 및 인라인 코드 증가스레드당 처리 요소 수를 늘림, 커널이 다중 요소를 처리하도록 데이터 변화
적용 대상/축주로 리덕션 축(Reduction Axis)의 루프, 주로 관계된 축주로 병렬 처리 축(Parallel Axis), 연속적 데이터 축 (예: elementwise 축)
스레드 수변경 없음감소
스레드 작업루프 구조 변경, 작업량 자체는 동일처리하는 요소 수 증가
주요 효과루프 오버헤드 감소, 추가 최적화 기회, 파이프라인 최적화커널 실행 오버헤드 감소, 메모리 대역폭 활용, 메모리 접근 최적화, 벡터화로 처리량 증가
사용 예시Opt(OptOps.UNROLL, axis, factor)Opt(OptOps.UPCAST, axis, amount)
적용 조건루프가 특정 값으로 반복 가능해야 함 (예: amt=2)데이터가 연속적(contiguous)이고 reduce 축이 아니어야 함

결론

#Tinygrad