Zig와 SIMD로 위성 궤도 계산, 1초에 1,100만 번!

by DD
4개월 전
조회수 8

SGP4 알고리즘을 활용하여 위성 위치를 계산하는 astroz 라이브러리를 개발, Zig를 통해 네이티브 성능을 극대화함

SIMD(Single Instruction, Multiple Data) 기술을 적용하여 1초당 1,100만 번 이상의 위성 위치 계산을 달성, 기존 구현 대비 2배 이상 향상

시간 배치(Time Batched)위성 배치(Satellite Batched) 등 다양한 데이터 처리 방식을 통해 캐시 효율성(Cache Efficiency)을 높임

파이썬 바인딩(Python Bindings)을 제공하여 파이썬 환경에서도 높은 성능을 유지하며, heyoka.py와의 성능 비교를 통해 사용 사례 제시

SIMD(Single Instruction, Multiple Data)를 활용한 성능 최적화

저자는 SGP4 알고리즘의 독립적인 특성을 활용하여 SIMD(Single Instruction, Multiple Data)를 적용, 성능을 극대화했다. 특히, Zig의 SIMD 지원(SIMD Support)을 통해 플랫폼 종속성 없이 벡터 연산을 구현했으며, 분기 처리(Branching)Kepler Solver수렴 루프(Convergence Loop)를 SIMD에 맞게 최적화했다. 이러한 접근 방식은 기존 스칼라 구현 대비 2배 이상의 성능 향상을 이끌어냈다.

메모리 접근 패턴 및 컴파일 타임 최적화

성능 향상의 핵심은 메모리 접근 패턴 최적화에 있다. 저자는 캐시 친화적인(Cache-Friendly) 데이터 레이아웃을 설계하고, 컴파일 타임(Compile Time)에 상수 값을 사전 계산하여 런타임 오버헤드를 줄였다. 특히, 시간 배치(Time Batched), 위성 배치(Satellite Batched), Constellation Mode 등 세 가지 전파 방식을 통해 다양한 사용 사례에 최적화된 성능을 제공한다.

Atan2 함수의 Polynomial Approximation

SGP4 알고리즘에서 사용되는 atan2 함수는 SIMD 연산을 위해 Polynomial Approximation을 통해 구현되었다. 저자는 정확도 저하를 최소화하면서 SIMD 연산을 가능하게 했으며, 이는 SGP4 알고리즘의 정확도 요구 사항(Accuracy Requirements) 내에서 충분한 성능을 제공한다. 이 과정에서 AI의 도움을 받아 구현했다는 점도 언급되었다.

Python 바인딩 및 성능 비교

astroz 라이브러리는 파이썬 바인딩을 제공하여 파이썬 환경에서도 높은 성능을 유지한다. 2주(초) 기준 160ms, 1개월(분) 기준 5.9ms의 성능을 보이며, 이는 기존 파이썬 sgp4 라이브러리보다 각각 2.9배, 2.7배 빠른 속도이다. 또한, heyoka.py와의 비교를 통해 사용 사례(Use Case)에 따른 성능 차이를 분석하여, 사용자 선택의 폭을 넓혔다.

Optimizing satellite position calculations with SIMD and Zig