Geoscript, 3D 기하 언어의 획기적인 성능 개선!

by DD
4개월 전
조회수 4

Geoscript는 Shadertoy 스타일의 웹 앱 Geotoy에서 사용되는 3D 기하 생성 및 조작을 위한 언어임

지속적인 표현식 캐싱(Persistent Expression Caching)을 통해 코드 변경 시 변경되지 않은 부분의 재실행을 방지하여 런타임 성능을 향상시킴

PRNG(Pseudo-Random Number Generator) 상태를 캐시 키에 포함시켜, 난수 생성 함수를 포함하는 표현식의 캐싱을 가능하게 함

개발 환경에서 코드 수정 및 반복 실행 시, 실행 시간 대폭 감소(Significant Reduction)를 통해 개발자 경험을 개선함

지속적 표현식 캐싱(Persistent Expression Caching)의 원리

Geoscript는 3D 기하 생성에 특화된 언어로, 개발자는 코드 변경 후 Geotoy에서 즉시 결과를 확인하는 반복적인 개발 주기를 거친다. 이러한 환경에서 지속적 표현식 캐싱(Persistent Expression Caching)은 변경되지 않은 코드 부분의 실행 결과를 재사용하여 실행 시간을 단축한다. 특히, 복잡한 연산을 수행하는 함수(예: alpha_wrap)의 경우, 입력값 변경이 없는 한 캐싱된 결과를 활용하여 실행 시간을 획기적으로 줄이는 효과(Dramatic Improvement)를 얻는다.

PRNG(Pseudo-Random Number Generator) 처리 방식

Geoscript는 난수 생성 함수를 포함하는 표현식의 캐싱을 위해 PRNG의 시작 상태를 캐시 키에 포함한다. 이는 PRNG가 결정론적(Deterministic)이기 때문에, 동일한 시드(Seed)와 호출 순서가 유지된다면 동일한 결과를 보장하기 때문이다. 기술적으로는, PRNG를 (rng_state) -> (T, new_rng_state) 형태의 순수 함수로 취급하여 캐싱을 가능하게 한다. 이러한 접근 방식은 난수 기반 연산(Random Number Based Operations)을 사용하는 다양한 기하 생성 코드의 성능을 최적화하는 데 기여한다.

상수 접기(Constant Folding) 및 CSE(Common Subexpression Elimination)와의 관계

Geoscript의 최적화 파이프라인은 상수 접기(Constant Folding)를 통해 AST(Abstract Syntax Tree) 내의 상수 표현식을 미리 계산한다. 또한, CSE(Common Subexpression Elimination)를 통해 동일한 표현식을 식별하고 재사용함으로써 중복 계산을 방지한다. 저자는 CSE 구현 과정에서 지속적 표현식 캐싱(Persistent Expression Caching) 아이디어를 얻었으며, 이는 기존의 최적화 기법을 보완하여 개발 생산성을 향상시키는 결과를 가져왔다.

개발 환경에서의 성능 개선 효과

Geoscript의 지속적 표현식 캐싱은 Geotoy와 같은 라이브 코딩 환경에서 개발자의 생산성을 크게 향상시킨다. 코드의 작은 변경에도 전체 프로그램을 다시 실행해야 하는 기존 방식과 달리, 변경되지 않은 부분은 캐싱된 결과를 활용하여 실행 시간을 단축한다. 이는 특히 복잡한 기하 연산을 포함하는 코드에서 개발 시간 단축(Reduced Development Time)실시간 피드백(Real-time Feedback)을 가능하게 하여 개발 경험을 개선한다.

A Unique Performance Optimization for a 3D Geometry Language