[Triton] ConSan에 버퍼 aliasing 지원 추가 — 메모리 안전성 분석 강화
PR 링크: triton-lang/triton#8939 상태: Merged | 변경: +1250 / -486
들어가며
ConSan(Concurrency Sanitizer)은 Triton 커널의 동시성 버그를 컴파일 타임에 감지하는 정적 분석 도구다. 예를 들어 한 warp이 shared memory에 쓰는 동안 다른 warp이 같은 영역을 읽으면 data race가 발생한다.
기존 ConSan은 각 버퍼를 독립적으로 취급했는데, 실제로는 서로 다른 이름의 버퍼가 같은 메모리 영역을 가리킬 수 있다(aliasing). 이 PR은 BufferRegion 분석을 통해 aliasing을 감지하고, 겹치는 버퍼 간의 동시성 버그도 탐지할 수 있게 한다.
핵심 코드 분석
AliasingMatrix 도입
// 버퍼 간 aliasing 관계를 표현하는 행렬
class AliasingMatrix {
// matrix[i][j] == true이면 buffer i와 j가 overlap 가능
SmallVector<SmallVector<bool>> matrix;
public:
bool mayAlias(unsigned bufferA, unsigned bufferB) const {
return matrix[bufferA][bufferB];
}
};
BufferRegion 분석
// 각 버퍼가 차지하는 메모리 영역을 분석
struct BufferRegion {
Value base; // 기준 메모리 주소
int64_t offset; // base로부터의 오프셋
int64_t size; // 바이트 크기
};
// 두 BufferRegion이 겹치는지 판단
bool overlaps(const BufferRegion &a, const BufferRegion &b) {
if (a.base != b.base)
return false; // 다른 base → no alias
// 같은 base에서 영역이 겹치는지 확인
return a.offset < b.offset + b.size &&
b.offset < a.offset + a.size;
}
ConSan에 aliasing 적용
// Before: 동일 버퍼만 검사
void checkRace(Operation *writeOp, Operation *readOp) {
if (getBuffer(writeOp) == getBuffer(readOp)) {
reportRace(writeOp, readOp);
}
}
// After: aliasing도 검사
void checkRace(Operation *writeOp, Operation *readOp) {
auto writeBuffer = getBuffer(writeOp);
auto readBuffer = getBuffer(readOp);
if (writeBuffer == readBuffer ||
aliasingMatrix.mayAlias(writeBuffer, readBuffer)) {
reportRace(writeOp, readOp);
}
}
왜 이게 좋은가
- 더 넓은 버그 탐지: aliased 버퍼 간 data race를 감지하여, 기존에 놓치던 동시성 버그를 잡는다.
- 보수적 분석: alias 가능성이 있으면 보수적으로 race로 판정하여 false negative를 최소화한다.
- 효율적 표현: AliasingMatrix로 O(1)에 aliasing 여부를 조회한다.
정리
이 PR은 ConSan에 BufferRegion 기반 aliasing 분석을 추가하여, 서로 다른 이름의 버퍼가 같은 메모리를 가리키는 경우의 동시성 버그도 감지할 수 있게 한다. 1250줄 추가의 대규모 변경으로, aliasing matrix 구축과 race 검사 로직 모두를 포함한다.
참고 자료
이 글은 AI(Claude)의 도움을 받아 작성되었습니다. 핵심 코드와 explaination은 실제 PR diff를 기반으로 합니다.
관련 포스트
PR Analysis 의 다른글
- 이전글 [Triton] WGMMA register pipelining에서 누락된 wait 삽입 수정
- 현재글 : [Triton] ConSan에 버퍼 aliasing 지원 추가 — 메모리 안전성 분석 강화
- 다음글 [triton] AMD: Warp Pipeline 지원 추가 - Gluon 프론트엔드부터 LLVM lowering까지
댓글