Triton 3.9.0이 GPU 커널 개발자를 위한 원자 연산, 여러 작업이 끼어들지 않는 메모리 연산과 컴파일 검사를 강화했다. 커널의 메모리 동작을 직접 제어할 수 있고, 일부 잘못된 입력은 실행 전 컴파일 단계에서 발견된다. 디버깅용 인터프리터, 코드를 읽어 동작을 흉내 내는 실행기가 컴파일된 커널과 더 일치하도록 고쳐져 결과 확인에도 도움이 된다.

1. 원자 연산으로 메모리 읽기와 쓰기를 제어

이번 버전은 메모리 값을 나눌 수 없는 한 번의 동작으로 읽거나 쓰는 원자 연산을 더했다. tl.atomic_load와 tl.atomic_store가 새로 들어갔으며, Gluon과 인터프리터에서도 사용할 수 있다.

tl.atomic_poll은 지정한 주소의 값이 기대값과 같아질 때까지 기다린다. 제한 시간 안에 일치하지 않으면 거짓을 반환하므로, 값이 준비됐는지 확인하는 대기에 종료 조건을 둘 수 있다.

메모리 순서, 읽기와 쓰기가 관찰되는 순서 처리를 블록 전체로 넓히는 이익에는 동기화 작업이 추가되는 비용이 따른다. 읽기·쓰기 순서를 지정한 원자 연산에는 같은 실행 블록의 흐름을 맞추는 장벽, 실행 흐름을 잠시 멈춰 맞추는 동기화 지점이 들어간다. 이 장벽을 피하려면 sem="relaxed"를 지정할 수 있어, 개발자는 필요한 순서 보장과 동기화 부담을 함께 살펴야 한다.

2. 잘못된 입력을 실행 전에 발견

여러 값을 묶은 튜플을 풀어 받는 항목 수가 맞지 않으면 이제 컴파일 시점에 실패한다. 상위 값을 고르는 tl.topk의 선택 개수가 유효하지 않거나, 배열을 잇는 tl.cat의 모양이 맞지 않는 경우도 같은 단계에서 오류를 낸다.

빈도 분포를 계산하는 tl.histogram에 32비트가 아닌 입력을 넣는 경우도 실행 전에 오류가 난다. 입력의 잘못을 컴파일 단계로 앞당겨, 커널을 실행한 뒤 결과에서 이상을 찾는 대신 입력과 호출 지점부터 살필 수 있게 한 변화다.

컴파일 시간도 개선됐다. 릴리스 노트에 따르면 중첩 깊이 8인 깊은 루프의 컴파일은 약 10배 빨라졌다. 이는 해당 중첩 깊이에서 제시된 결과다.

3. 인터프리터와 컴파일된 커널의 결과를 맞춤

디버깅용 인터프리터는 코드를 해석해 실행하며, 이번 수정은 그 결과가 컴파일된 커널과 맞도록 하는 데 초점을 뒀다. 정수가 표현 가능한 범위를 넘는 오버플로, 표현 가능한 범위를 넘는 값의 넘침과 정수 곱의 상위 비트, 정수 표현에서 높은 자리의 비트를 구하는 연산의 동작을 바로잡았다.

곱셈과 덧셈을 하나로 처리하는 융합 연산과 히스토그램 계산도 일치하도록 수정했다. 개발자는 이 연산들을 인터프리터에서 점검할 때 실행 방식 차이 때문에 생기는 결과 불일치를 덜 겪게 된다. 오류를 일찍 찾는 컴파일 검사와 함께, 계산 결과를 확인하는 단계도 정비한 셈이다.

4. 기존 커널의 자료형 변환을 점검

32비트보다 좁은 부동소수점 값이 나눗셈이나 나머지 연산의 피연산자, 연산에 입력으로 들어가는 값에 있으면 결과가 float32가 된다. 파이썬 스칼라와 함께 쓰는 경우도 해당한다. 기존 자료형의 결과를 유지하려면 연산 결과를 원하는 형으로 변환해야 한다.

텐서의 수학 메서드에도 함수와 같은 자료형 검사가 적용된다. 예를 들어 지수함수 메서드는 16비트 부동소수점 입력에서 컴파일에 실패한다. 릴리스 노트는 먼저 32비트 부동소수점으로 바꾸는 다음 예를 제시한다.

x.to(tl.float32).exp()

이런 변경은 자료형을 자동으로 처리하던 기존 코드에도 수정 지점을 만든다. 업그레이드할 때는 새로 발생하는 컴파일 오류를 고치는 작업과 함께, 연산 결과가 저장될 자료형을 확인하는 작업이 필요하다.

5. 다음 버전의 융합 기본값에 대비

곱셈과 덧셈을 자동으로 합치는 암묵적 부동소수점 융합은 3.9에서 계속 켜져 있다. 다만 enable_fp_fusion을 지정하지 않은 커널을 컴파일할 때 프로세스당 한 번 경고한다. 3.10에서는 이 융합이 기본적으로 꺼질 예정이다.

릴리스 노트는 수치 결과가 융합에 의존하는 커널에 tl.fma를 명시적으로 호출하도록 안내한다. 현재 기본값에 기대기보다 계산 의도를 코드에 남겨 다음 버전의 기본값 변화에 대비하는 방법이다.

Triton 3.9.0의 핵심은 커널 작성자가 원자 메모리 동작을 직접 다루면서 오류를 더 일찍 찾게 하고, 달라진 순서·형 규칙을 다음 버전에 앞서 점검하게 한 점이다.