[triton] AMD ConvertWarpPipeline에서 AsyncWaitOp 인식 및 Barrier 정렬 수정
PR 링크: triton-lang/triton#9593 상태: Merged | 변경: +83 / -2
들어가며
AMD의 warp pipeline은 루프 본문의 연산을 여러 스테이지로 나누어 파이프라인 병렬 처리합니다. ConvertPipelinedForPattern은 스테이지 사이의 barrier를 인식하여 동기화 포인트를 삽입하는데, amdg.async_wait 연산이 누락되어 있었습니다.
핵심 코드 분석
Before
} else if (isa<ROCDL::BarrierOp, gpu::BarrierOp, triton::gpu::AsyncWaitOp,
triton::amdgpu::AsyncTDMWait,
triton::amdgpu::AsyncTDMIntrinsicWait>(op)) {
// amdgpu::AsyncWaitOp 미인식
existingBarrierMap[currCluster] = &op;
bars.push_back(false); // 잘못된 bars 추가로 cluster/bar 어긋남
After
} else if (isa<ROCDL::BarrierOp, gpu::BarrierOp, triton::gpu::AsyncWaitOp,
triton::amdgpu::AsyncWaitOp, // 추가
triton::amdgpu::AsyncTDMWait,
triton::amdgpu::AsyncTDMIntrinsicWait>(op)) {
existingBarrierMap[currCluster] = &op;
// bars.push_back(false) 제거
테스트
tt.func @async_wait_between_stages(%n: index, %ptr: !tt.ptr<f32>) {
scf.for %i = %c0 to %n step %c1 {
scf.execute_region { ... } {triton.warp_pipeline.stage = "stage1"}
amdg.async_wait {num_inst = 0 : i32} // 이제 barrier로 인식
scf.execute_region { ... } {triton.warp_pipeline.stage = "stage2"}
} {triton.warp_pipeline.pipelined_for}
}
왜 이게 좋은가
- 완전한 barrier 인식: async wait를 포함한 모든 동기화 연산이 파이프라인에서 올바르게 처리됩니다.
- 배열 정렬 수정: bars와 clusterBlocks 배열의 1:1 대응이 보장됩니다.
- E2E 테스트: Python 수준의 warp pipeline 컴파일 테스트도 추가되었습니다.
정리
Warp pipeline의 barrier 인식 목록에 amdg.async_wait를 추가하고, bars 배열 정렬 버그를 수정한 PR입니다. 파이프라인 pass에서 새로운 동기화 연산의 누락은 미묘한 correctness 버그를 유발하므로 주의가 필요합니다.
참고 자료
이 글은 AI(Claude)의 도움을 받아 작성되었으며, 원본 PR의 코드 변경 사항을 기반으로 분석한 내용입니다.
관련 포스트
PR Analysis 의 다른글
- 이전글 [pytorch] CI: Inductor 벤치마크 CI 작업을 CUDA 12.8에서 13.0으로 통합 전환
- 현재글 : [triton] AMD ConvertWarpPipeline에서 AsyncWaitOp 인식 및 Barrier 정렬 수정
- 다음글 [triton] Gluon tmem_load에서 Register Layout 자동 추론
댓글