본문으로 건너뛰기

[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);
  }
}

왜 이게 좋은가

  1. 더 넓은 버그 탐지: aliased 버퍼 간 data race를 감지하여, 기존에 놓치던 동시성 버그를 잡는다.
  2. 보수적 분석: alias 가능성이 있으면 보수적으로 race로 판정하여 false negative를 최소화한다.
  3. 효율적 표현: AliasingMatrix로 O(1)에 aliasing 여부를 조회한다.

정리

이 PR은 ConSan에 BufferRegion 기반 aliasing 분석을 추가하여, 서로 다른 이름의 버퍼가 같은 메모리를 가리키는 경우의 동시성 버그도 감지할 수 있게 한다. 1250줄 추가의 대규모 변경으로, aliasing matrix 구축과 race 검사 로직 모두를 포함한다.

참고 자료


이 글은 AI(Claude)의 도움을 받아 작성되었습니다. 핵심 코드와 explaination은 실제 PR diff를 기반으로 합니다.

댓글

관련 포스트

PR Analysis 의 다른글