[triton] AMD MoveUpPrologueLoads로 ReorderInstructions 패스 완전 대체
PR 링크: triton-lang/triton#9328 상태: Merged | 변경: +262 / -321
들어가며
AMD의 ReorderInstructions 패스는 원래 여러 명령어 재배치 최적화를 포함했지만, #9119(sinkSecondLoad), #9139(sinkDotConversion), #9204(moveUpTranspose) 등의 제거를 거쳐 prologue load를 위로 이동시키는 하나의 최적화만 남았습니다. 이 PR은 그 남은 최적화를 새로운 전용 패스로 분리합니다.
핵심 코드 분석
새 패스 등록:
// RegisterTritonDialects.h
mlir::registerTritonAMDGPUMoveUpPrologueLoads(); // 새 패스
// 이전: mlir::registerTritonAMDGPUReorderInstructions();
새 패스의 핵심 로직:
패스는 amd.pipeliner_part = "prologue" 속성이 있는 load를 찾아, barrier/atomic/loop 등의 side-effect 연산 전으로 이동시킵니다.
// CHECK-LABEL: move_up_slice
// CHECK: arith.cmpi
// CHECK: tt.splat
// CHECK: tt.load
// CHECK: ttg.local_alloc
// Negative: load without prologue attribute stays in place
// CHECK-LABEL: no_prologue_attribute
// CHECK: ttg.local_alloc
// CHECK: tt.load
왜 이게 좋은가
단일 책임 원칙(SRP)을 따르는 패스 설계의 좋은 사례입니다. ReorderInstructions라는 포괄적 이름 대신 MoveUpPrologueLoads라는 명확한 이름이 패스의 역할을 즉시 전달합니다. 또한 amd.pipeliner_part 속성 기반으로 대상을 명시적으로 선택하므로, 의도치 않은 load 이동을 방지합니다.
정리
- ReorderInstructions를 MoveUpPrologueLoads로 대체
amd.pipeliner_part = "prologue"속성 기반 명시적 대상 선택- barrier, atomic, loop 등에서 이동 중단
- 262줄 추가, 321줄 제거로 코드 순감소
참고 자료
이 분석은 AI가 실제 코드 diff를 기반으로 작성했습니다.
관련 포스트
PR Analysis 의 다른글
- 이전글 [triton] AMD gfx1250 Gluon에 Tensor Async Gather(TDM) 지원 추가
- 현재글 : [triton] AMD MoveUpPrologueLoads로 ReorderInstructions 패스 완전 대체
- 다음글 [Triton] AMD PartitionedSharedEncodingAttr 도입 — shared memory 파티션 충돌 감소
댓글