시프트와 XOR를 이용한 초장기 난수 생성기
초록
마르샤글라가 제안한 xorshift RNG는 2ⁿ‑1 의 주기를 갖지만, 다항식의 가중치가 낮아 통계적 결함이 발생할 수 있다. 본 논문은 이러한 한계를 극복하기 위해 다중 시프트와 XOR 연산을 조합한 일반화된 xorshift 구조를 제시하고, 원시 삼항식 대신 높은 가중치를 가진 최소 다항식을 선택함으로써 주기를 2ⁿ‑1 이상으로 늘린다. n이 2의 거듭 제곱(최대 4096)인 경우에 대해 마그마 기반 탐색을 수행해 최적 파라미터를 찾았으며, 구현은 자유 소프트웨어 패키지 xorgens에 포함된다.
상세 분석
본 논문은 기존 xorshift RNG가 갖는 구조적 한계를 면밀히 분석한다. Marsaglia의 원래 설계는 단일 선형 피드백 시프트 레지스터(LFSR)와 유사하게 동작하지만, 최소 다항식이 삼항식(trinomial) 형태이기 때문에 비트 가중치(weight)가 3에 불과하다. 이는 특정 비트 패턴에 대한 민감도를 낮추고, 고차원 통계 테스트에서 약점을 드러낸다. 저자들은 이를 보완하기 위해 “다중 시프트·XOR” 구조를 도입한다. 구체적으로, 상태 변수 S를 k개의 서로 다른 시프트 연산 s₁,…,s_k와 XOR 연산을 순차적으로 적용한 뒤, 최종 결과를 새로운 상태로 복사한다. 수식으로는
S_{t+1}=(((S_t ⊕ (S_t « a₁)) ⊕ (S_t » b₁)) ⊕ … ⊕ (S_t « a_k))
와 같이 표현된다. 여기서 a_i, b_i는 서로 다른 양의 정수이며, 각 단계에서 비트가 넓게 퍼지도록 설계된다. 이러한 연산은 선형 변환 행렬의 비대칭성을 증가시켜 최소 다항식의 가중치를 크게 만든다.
저자들은 “primitive polynomial” 조건을 만족하는 최소 다항식을 찾기 위해 Magma를 이용한 전산 탐색을 수행했다. 탐색 대상은 n이 2^m 형태인 경우이며, n=32,64,…,4096까지 확장한다. 탐색 과정에서 고려된 기준은 (1) 주기가 2ⁿ‑1에 도달하는지, (2) 최소 다항식의 가중치가 충분히 큰지(보통 2030 이상), (3) 구현 시 연산 비용이 적당한지이다. 결과적으로, 각 n에 대해 35개의 파라미터 집합이 선정되었으며, 이들은 xorgens 라이브러리에 하드코딩되어 있다.
성능 평가에서는 TestU01의 Crush와 BigCrush 테스트 배터리를 적용하였다. 대부분의 후보는 모든 테스트를 통과했으며, 특히 높은 차수의 선형 복합성 테스트에서 기존 xorshift 대비 현저히 개선된 점수를 기록했다. 또한, CPU 사이클당 난수 생성 속도는 기존 xorshift와 거의 동일하거나 약간 빠른 수준을 유지했다. 이는 시프트와 XOR 연산이 현대 프로세서에서 매우 효율적으로 구현될 수 있기 때문이다.
마지막으로, 저자들은 이 설계가 병렬 환경에서도 적용 가능함을 언급한다. 상태를 독립적인 블록으로 나누어 각 스레드가 동일한 파라미터 집합을 사용하되 서로 다른 초기 시드를 부여하면, 상호 독립적인 난수 스트림을 손쉽게 생성할 수 있다. 이는 대규모 시뮬레이션이나 몬테카를로 방법에서 중요한 요구사항이다.
댓글 및 학술 토론
Loading comments...
의견 남기기