[triton] AMD ReorderInstructions에서 no-op sinkDotConversion 최적화 제거
PR 링크: triton-lang/triton#9139 상태: Merged | 변경: +0 / -22
들어가며
컴파일러 코드베이스에서 더 이상 효과가 없는 최적화 패스를 유지하는 것은 코드 복잡성만 높이고, 미래의 변경에서 혼란을 줄 수 있습니다. 이 PR은 AMD ReorderInstructions 패스에서 sinkDotConversion 최적화를 제거합니다.
핵심 코드 분석
Before (제거된 코드):
static void sinkDotConversion(triton::FuncOp funcOp) {
DenseMap<Operation *, Operation *> opToMove;
funcOp.walk([&](ttg::ConvertLayoutOp op) {
Attribute encoding = op.getType().getEncoding();
if (!isa_and_nonnull<ttg::DotOperandEncodingAttr>(encoding))
return;
if (!op->hasOneUse())
return;
Operation *user = *op->getUsers().begin();
if (user->getParentOfType<scf::ForOp>() ==
op->getParentOfType<scf::ForOp>())
return;
opToMove[op] = user;
});
for (auto &kv : opToMove)
kv.first->moveBefore(kv.second);
}
이 코드는 DotOperandEncoding을 가진 ConvertLayoutOp을 사용자(dot 연산) 바로 앞으로 이동시켜 레지스터 압력을 줄이려는 최적화였습니다. 그러나 ReduceDataDuplication 패스가 이미 ConvertLayoutOp을 local_load로 변환하므로, ReorderInstructions 실행 시점에는 대상 연산이 존재하지 않아 사실상 no-op이었습니다.
After:
void runOnOperation() override {
ModuleOp m = getOperation();
for (auto funcOp : m.getOps<triton::FuncOp>()) {
// sinkDotConversion 호출 제거됨
moveDownCoversion(funcOp);
moveUpTranspose(funcOp);
moveUpGlobalLoadInPrologue(funcOp);
}
}
왜 이게 좋은가
Dead code 제거는 유지보수 비용을 절감합니다. 22줄의 코드와 관련 테스트가 제거되어, 향후 ReorderInstructions 패스를 수정할 때 불필요한 코드를 분석할 필요가 없어집니다. 파이프라인 순서 변경으로 인해 효과를 잃은 최적화를 적극적으로 정리하는 것은 건강한 코드베이스 관리의 좋은 사례입니다.
정리
sinkDotConversion이ReduceDataDuplication후 no-op이 됨을 확인- 22줄의 dead code 및 관련 테스트 제거
- ReorderInstructions 패스 간결화
참고 자료
이 분석은 AI가 실제 코드 diff를 기반으로 작성했습니다.
관련 포스트
- [triton] AMD ReorderInstructions에서 효과 없는 sinkSecondLoad 최적화 제거
- [triton] AMD Canonicalize Pointers에서 arith.select의 비대칭 fat pointer 처리 강화
- [triton] AMD GFX1250 MXFP Flash Attention 예제 커널 대규모 리팩터링
- [triton] Triton AMD GPU: 버퍼 로드 루프 내 주소 계산 최적화
- [triton] AMD: PartitionedSharedEncodingAttr의 LLVM lowering 지원으로 공유 메모리 파티셔닝 구현
PR Analysis 의 다른글
- 이전글 [vllm] MORI KV Connector - ROCm 기반 Prefill-Decode Disaggregation
- 현재글 : [triton] AMD ReorderInstructions에서 no-op sinkDotConversion 최적화 제거
- 다음글 [Triton] 소규모 async_cp를 위한 최적 레이아웃 선택
댓글