본문으로 건너뛰기

[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 의 다른글