크라우니 양자 시뮬레이터 v2 — 2000큐비트 실측·정량 비교·범용화 로드맵
개요
전편(2026-07-02, 40큐비트 v1)에 이어: ① 기존 시뮬레이터 정량 비교 ② 1000/2000큐비트 실구현+실측 ③ 최적화 요소 체크 ④ 범용성(근사) 현황·목표 재수립.
v2로 2000큐비트 실측 성공 (
libs/양자스테빌라이저2.한선).
실측 결과 (Mac, crownyc C VM 인터프리터)
| n | 초기화 | H게이트 | CX게이트 | 측정(희소) | 정합 |
|---|
| 40 | <1ms | 0.45ms/개 | 0.87ms/개 | 28ms | ✓ |
| 100 | ~10ms | 1.1ms | 2.2ms | 83ms | ✓ |
| 500 | ~1s | 5.1ms | 10.6ms | 27ms | ✓ |
| 1000 | 2s | 10.2ms | 21.2ms | 32ms | ✓ |
| 2000 | 8.3s | 20.9ms | 42.9ms | 33ms | ✓ |
- 게이트 O(2n) 선형 스케일 확인(행당 ~5.2µs H / ~10.7µs CX). RSS n=2000 = 572MB. GHZ 정합 전 구간 1.
- v1 상한 44큐비트(평면배열 4095캡) → v2 2D 행배열(참조 시멘틱)로 ~2047큐비트 상한.
기존 시뮬레이터 정량 비교 (문헌치)
| 시뮬레이터 | 방식 | 규모 | 속도 | 메모리 |
|---|
| Stim (Google) | 스테빌라이저, AVX256 비트팩킹, 역테이블로 | 20,000큐비트(d=100 표면코드) | 800만 게이트+100만 측정 분석 15s(~53만 게이트/s), 샘플링 1kHz | 2n²비트: n=2000→1MB |
| CHP (2004) | 스테빌라이저, 32비트팩킹 | ~3,000큐비트 | ~µs/게이트 | 수 MB |
| Qiskit Aer statevector | 상태벡터(정확·범용) | ~32큐비트 한계(2^n×16B: 30q=17GB) | 게이트당 O(2^n) | 40q=17.6TB(불가) |
| Aer extended_stabilizer | 랭크분해(Clifford+T 근사) | ≤63큐비트, T수 제한 | 항수 2^{0.396t} 지수 | 오차 δ=0.05 기본 |
| Aer MPS / 텐서네트워크 | 근사(얽힘 결합차원 χ) | 100~1000+큐비트(저얽힘) | 회로 구조 의존 | n·χ²·16B |
| 크라우니 v2 | 스테빌라이저, 순수 한선씨 인터프리터 | 2000큐비트 실측 | ~25–50 게이트/s(n=2000) | 572MB(n=2000) |
- 격차 분석: Stim 대비 게이트 처리율 ~10⁴× 느림 = ①인터프리터(네이티브 대비 ~10²) ②비트팩킹 부재(원소당 1큐브 27트릿 vs 256비트 SIMD ~10²).
알고리즘은 동급(같은 CHP 테이블로), 격차는 전부 표현·실행 계층.
- 강점: 32큐비트가 한계인 상태벡터 대비 클리포드 클래스에선 우리도 2000큐비트 — 알고리즘 선택이 하드웨어를 이긴 사례. 40큐비트 기준 상태벡터 17.6TB vs 우리 ~수백KB 논리상태.
이번에 발견·수정한 것
- 정수 24트릿(±1.41e11) 곱셈 오버플로 — LCG 씨앗×48271이 래핑 → 소형 모듈러스 LCG(4093/1048573)로 v1·v2 수정.
- crownyc 힙 = 48M큐브 아레나(1.3GB), 배열=고정 4097큐브 블록 → 최대 ~11,700배열, GC 없음. 풀 고갈 시 추가()가 조용히 실패(길이0). → 같은 n 재초기화는 제자리 0채움으로 회피(v2 양자초기화). 지식셀 #20467.
- 벤치 설계 버그(타이밍 게이트 잔여 상태) 수정 — GHZ 정합 전 구간 1 회복.
1000/2000큐비트 도구화 최적화 체크리스트 (우선순위)
| # | 항목 | 기대 효과 | 난이도 |
|---|
| 1 | 비트팩킹: 비트배타/비트곱/왼시프트 내장으로 행을 32비트/정수 팩킹(24트릿 정수에 32비트 안전) | 행합·CX ~30×, 메모리 ~30× | 중 (순수 한선씨 가능) |
| 2 | 네이티브 opcode: C레벨 행XOR·행합·테이블로 게이트(Stim식) — crownyc.c 확장 + 한선씨 래퍼 더블 | ~10²~10³× (Stim급 접근) | 중상 |
| 3 | 역테이블로(Stim 트릭): 결정론 측정 O(n²)→O(n) | 측정 지배 회로 ~n× | 상 |
| 4 | 힙: ARRAY_BLOCK 가변화 or 트릿팩킹(큐브당 27비트) + free-list GC | 배열 풀 11.7k→수십만 | 중 |
| 5 | 아레나 상향(48M→192M 큐브) — 다중 인스턴스/4095큐비트 대응 | 상한 2047→4095q | 하 |
| 6 | 초기화 최적화(대각 직접 생성, 제자리 재사용) — 현재 8.3s/11s | 초기화 ~10× | 하 |
- 순서 권고: ①비트팩킹(순수 한선씨, 즉시) → ⑤아레나 → ②네이티브 opcode → ③역테이블로. ②까지 가면 n=2000 게이트 ~µs급 = 실용 도구.
범용성(근사) 현황과 목표 재수립
현황: 클리포드 클래스 = 근사 0(정확), 비클리포드(T게이트) = 0% 지원. "범용 정확 1000q+"는 어떤 시뮬레이터도 불가능(가능하면 양자컴퓨터 무용) — 범용의 실제 의미는
회로 클래스별 최적 엔진 자동 라우팅 + 오차 계량 보고로 재정의.
| 티어 | 엔진 | 규모 목표 | 근사/오차 | 상태 |
|---|
| T1 | 클리포드 스테빌라이저 | 2000q 실측 → 4095q | 정확(오차 0) | 완료(v2) |
| T2 | Clifford+T 확장 스테빌라이저 | n≤50, T게이트 t≤25 | 랭크 2^{0.396t}항, δ=0.05 목표(Aer 동급) | 미착수 |
| T3 | MPS 텐서네트워크 | n≤2000(저얽힘) | 트렁케이션 오차 실시간 추적, 1D근접 F≥0.99 | 미착수 |
| T4 | 정확 상태벡터(검증용) | n≤16(고정소수점 복소) | 반올림 오차만 | 미착수 |
| T0 | 4상 분별 라우터: 회로 스캔→티(클리포드→T1)/옴(T소수→T2)/타(고얽힘 대형→경고·거부)/음(소형→T4 검증) | — | — | 미착수 |
관련 파일
- v2:
/Users/ef/CrownyOS/crownyc/libs/양자스테빌라이저2.한선 (제자리 재초기화 포함)
- v1(40q, LCG수정):
/Users/ef/CrownyOS/crownyc/libs/양자스테빌라이저.한선 · 데모 양자데모.한선
- 벤치: scratchpad 양자벤치·양자마이크로·양자벤치2000.한선
- 학습 intent:
양자_스테빌라이저_40큐비트_시뮬레이터 / 양자_스테빌라이저_2000큐비트_시뮬레이터_v2 (DB 3곳)
잔여 이슈
비트팩킹 v3 → 네이티브 opcode → T2~T4 엔진 → T0 라우터 → game.crowny.org/quantum 서비스화. 큐트리트(Z₃ 트릿네이티브) 엔진은 별도 트랙.