피드로 돌아가기
Registers, Lanes, and Berry Phase: Lifting Siunertaq from Batch Graphs to the Complex Plane
Dev.toDev.to
Infrastructure

Opaque Type 기반 Register 설계로 23-byte 불변성 보장 및 SIMD 구조 구현

Registers, Lanes, and Berry Phase: Lifting Siunertaq from Batch Graphs to the Complex Plane

Yoshihiro Hasegawa2026년 6월 17일12advanced

Context

Cats Effect의 Ref[IO, Array[Byte]] 사용 시 발생하는 Array Aliasing 문제로 인한 내부 상태의 무분별한 가변성 발생. 데이터 길이 제약 조건(Golay Word 23-byte)을 런타임이 아닌 타입 시스템 수준에서 강제할 필요성 대두.

Technical Solution

  • Scala 3의 opaque type을 활용하여 IArray[Byte]를 래핑한 GolayWord 타입을 정의함으로써 외부의 직접적인 배열 접근 차단
  • Companion Object 내부에만 생성 로직을 캡슐화하여 23-byte 길이 제약 조건을 구조적 불변성(Structural Invariant)으로 강제
  • Ref 자체를 다시 opaque type(GolayWordRef)으로 감싸 대수적 업데이트(Algebra-preserving updates)만 허용하는 Register 파일 구조 설계
  • Frobenius Morphism을 기반으로 W8(759 lanes), W12(2576 lanes) 등 가중치 클래스별 데이터를 동시에 처리하는 SIMD/SIMT 모델 도입
  • MLIR Affine Dialect와 LLVM IR을 통해 검증된 Norm Bound를 JIT 컴파일하는 IR Generator 구조로 확장

Impact

  • Golay Code의 5개 Weight Class에 대해 최대 2,576개의 SIMD Lane 동시 처리 구조 확보
  • 총 4,096(2¹²)개의 상태 공간에 대한 엄격한 타입 안전성 및 원자적 업데이트 보장

1. Mutable Collection을 Ref/AtomicReference로 관리할 때, 내부 값 자체를 Immutable Wrapper로 감싸 Aliasing 위험을 제거했는지 확인

2. 도메인 특정 제약 조건(예: 고정 길이, 특정 범위)이 있다면 런타임 체크 대신 Opaque Type을 통해 타입 시스템 수준의 보증 체계 구축

3. 대규모 상태 업데이트가 필요한 경우, 개별 업데이트 대신 수학적 대칭성을 이용한 Lane 기반의 SIMD 처리 구조 검토

원문 읽기