본문으로 건너뛰기

[Triton] debuginfo 테스트 단순화 — subprocess 제거

PR 링크: triton-lang/triton#8350 상태: Merged | 변경: +54 / -66

들어가며

Triton의 test_triton_debuginfo_on 테스트는 LLVM IR에 디버그 정보(dbg_value, DILocalVariable)가 올바르게 생성되는지 검증한다. 기존에는 환경변수 설정을 위해 별도의 Python subprocess를 spawn하는 방식이었는데, 이는 느리고 복잡했다. 이 PR은 pytest의 monkeypatchparametrize를 사용하여 같은 프로세스 안에서 테스트하도록 개선한다.

핵심 코드 분석

Before

def test_triton_debuginfo_on():
    envs = [
        {lineInfoKey: None, diLocalVarKey: None, "hasDbgInfo": False},
        {lineInfoKey: None, diLocalVarKey: "1", "hasDbgInfo": hasOrigLineInfo},
        # ...
    ]
    _run_test = lambda test_env: subprocess.run([
        "python3", os.path.dirname(...) + "/test_debuginfo_helper.py"
    ], env=test_env, capture_output=True, text=True)
    for env in envs:
        test_env = os.environ.copy()
        # ... env 설정 ...
        checkDbgInfo(str(_run_test(test_env).stdout), hasDbgInfo=env["hasDbgInfo"])

별도 helper 스크립트(test_debuginfo_helper.py)를 subprocess로 실행하고 stdout을 파싱했다.

After

@pytest.mark.parametrize("lineInfoKey, diLocalVarKey, hasDbgInfo", [
    (None, None, False),
    (None, "1", "infer"),
    ("0", "1", True),
    ("1", "1", False),
    ("0", "0", False),
    ("1", "0", False),
])
def test_triton_debuginfo_on(lineInfoKey, diLocalVarKey, hasDbgInfo, device, monkeypatch):
    if lineInfoKey is not None:
        monkeypatch.setenv(lineInfoKeyName, lineInfoKey)
    # ...
    add_kernel.device_caches.clear()
    h = add_kernel[grid](x, y, output, n_elements, BLOCK_SIZE=1024)
    checkDbgInfo(h.asm['llir'], hasDbgInfo)

monkeypatch.setenv로 환경변수를 설정하고, 커널의 asm['llir']에서 직접 LLVM IR을 검사한다. test_debuginfo_helper.py는 삭제되었다.

왜 이게 좋은가

  1. 속도 향상: subprocess spawn 오버헤드가 없어져 테스트가 빨라진다
  2. 단순성: 파일 2개(테스트 + 헬퍼)가 1개로 줄었다
  3. pytest 통합: parametrize 덕분에 각 환경변수 조합이 독립적인 테스트 케이스로 표시된다
  4. 신뢰성: stdout 파싱 대신 h.asm['llir']을 직접 검사하여 더 안정적이다

정리

테스트 코드도 프로덕션 코드와 마찬가지로 유지보수 대상이다. subprocess 기반 테스트는 디버깅이 어렵고 CI 환경에서 flaky해지기 쉽다. pytest의 monkeypatch는 환경변수 조작이 필요한 테스트를 깔끔하게 작성하는 좋은 방법이다.

참고 자료


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

댓글

관련 포스트

PR Analysis 의 다른글