고속 벡터화 월리스 정규 난수 생성기 구현

월리스가 제안한 정규분포 난수 생성 방법은 초기화용 균등 난수만 필요하고, 이후에는 정규 난수 풀을 직교 행렬로 변환하는 연산만 수행한다. 저자는 이를 벡터 프로세서에 최적화하여 RANN4 라는 구현을 만들었으며, Fujitsu VP2200·VPP300에서 기존 Polar·Box‑Muller 방식보다 3배 이상 빠른 성능을 보였다.

저자: ** - **Richard P. Brent** (주 저자, 당시 Fujitsu 연구원) **

본 논문은 정규분포 난수 생성에 대한 새로운 접근법을 제시하고, 이를 고성능 벡터 프로세서에 최적화한 구현 RANN4를 상세히 기술한다. 전통적인 정규 난수 생성 방법인 Box‑Muller와 Polar는 균등 난수를 이용해 로그·제곱근·삼각함수 등을 계산해야 하며, 이러한 연산은 벡터화에 부적합해 순차적인 CPU에서만 효율적이다. 반면, Wallace가 제안한 방법은 초기화 단계에서만 균등 난수가 필요하고, 이후에는 정규 난수 풀을 직교 행렬 A로 변환하는 연산만 수행한다. 직교 변환은 평균·분산을 보존하면서 새로운 정규 난수 집합을 생성하므로, 풀의 크기 2N( N은 2의 거듭제곱)과 변환 차원 n(보통 2~4)을 적절히 선택하면, 한 패스당 N·(α+β‑1) 번의 벡터 연산으로 2N개의 난수를 재생성할 수 있다. 핵심 수식은 x′,y′ = A·(x_{αj+γ mod N}, y_{βj+δ mod N}) 로, 여기서 α,β는 인덱스 스트라이드, γ,δ는 오프셋이다. GCD(α,N)=GCD(β,N)=1이어야 전체 인덱스가 순열을 이루어 풀의 모든 원소가 사용된다. 저자는 α=3, β=5와 같이 서로 다른 홀수 값을 선택해 메모리 접근을 비단위(stride)로 만들고, γ,δ를 매 패스마다 무작위로 바꾸어 장기 상관을 최소화한다. 또한, 매 패스마다 회전각 θ가 다른 2×2 직교 행렬 A를 사용해 변환 행렬을 다양화한다. θ는 π/6 ≤ |θ| ≤ π/3 혹은 2π/3 ≤ θ ≤ 5π/6 범위 내에서 선택되며, tan(θ/2)만 균등 난수로 얻어 sin·cos을 산술 연산으로 계산한다. 정규 난수 풀의 제곱합이 고정되는 문제를 해결하기 위해, 풀에서 한 원소를 제외하고 χ²ν(ν=2N) 분포를 근사한 스케일링 팩터 S를 도입한다. 이는 A 행렬을 스케일링함으로써 구현되며, 연산량에 큰 영향을 주지 않는다. 저자는 2χ²ν ≈ (x + √(2ν‑1))² 형태의 근사식을 사용한다. 벡터화 구현에서는 인덱스 연산을 루프 외부로 이동시켜 DO‑LOOP 안에서는 부동소수점 곱·덧셈·로드·스토어만 수행하도록 설계했다. 한 난수당 필요한 연산은 부동소수점 곱 2회, 덧셈 1회, 비단위 로드 1회, 단위 스토어 1회이며, α+β가 작을수록 효율이 높다. 또한 “throw‑away factor” f를 도입해 2N개의 생성된 난수 중 1/f만 사용자에게 반환하고 나머지는 다음 풀 재생성에 사용한다. 실험 결과 f≥3이면 통계적 품질이 충분히 유지되면서도 성능 저하가 최소화된다. RANN4는 Fujitsu VP2200/10과 VPP300에서 구현되었으며, 초기화와 매개변수(α,β,γ,δ,θ) 생성을 위해 기존 균등 난수 생성기 RANU4를 사용한다. 풀 크기는 2N (N≥2⁵⁶) 로 설정해 작업 영역의 절반을 차지하도록 한다. 구현에서는 α∈{3,5}, β∈{7,11}을 선택하고, γ,δ를 0~N‑1 범위에서 균등하게 뽑는다. θ는 tan(θ/2)를 균등 난수로 얻어 sin·cos을 산술 연산으로 계산한다. 성능 측정 결과, f=3일 때 VP2200/10에서 정규 난수 하나당 6.4 사이클(≈23.6 ns), f=1일 때는 2.8 사이클(≈10 ns)이다. 이는 기존 Polar 방법(≈21.9 사이클)보다 3배 가량 빠르며, VPP300에서는 약 2배 더 빠른 결과를 보인다. 통계 검증으로는 (x²+y²) 기반의 지수 변환을 이용한 균등성 검사, arctan 변환을 이용한 균등성 검사, 그리고 평균·2차·4차 모멘트 검증을 10⁷개 샘플에 대해 수행했으며, 모든 f값에서 χ² 통계가 정상 범위에 머물렀다. 결론적으로, 월리스의 정규 난수 재생성 아이디어를 벡터 프로세서에 맞게 스트라이드와 매개변수를 조정하고, 풀의 제곱합 보정을 추가함으로써 기존 방법 대비 현저히 높은 처리량과 충분한 통계적 무작위성을 동시에 달성하였다. 이는 대규모 시뮬레이션이나 몬테카를로 계산에서 정규 난수 생성이 병목이 되는 경우에 특히 유용할 것으로 기대된다.

원본 논문

고화질 논문을 불러오는 중입니다...

댓글 및 학술 토론

Loading comments...

의견 남기기