양자 시뮬레이터 v3 — C네이티브 벌크 opcode로 93× (GHZ-2000 = 1.7초)
개요
최적화 체크리스트의 최대 지렛대(C네이티브 opcode + 아레나 상향)를 실행. crownyc VM에 opcode 890~894를 추가하고 한선씨 동반 라이브러리 v3를 작성,
GHZ-2000 엔드투엔드 160초(v2 투영) → 1.7초 = 93×. 정확성 회귀(검증 10종·프레임·EPR·비양자 사니티) 전부 통과.
VM 변경 (crownyc.c — 백업: crownyc.c.bak-양자opcode)
- opcode 890~894 신설 (테이블로 행/열 연산 C레벨):
- 890
양자행합G(rxh,rzh,rxi,rzi,n) — 행합 g위상합+제자리XOR
- 891
양자열게이트(QXM,QZM,QR,a,b,행수,모드) — 모드 0H/1S/2CX/3X/4Z/5Y
- 892
양자행복사영(rxd,rzd,rxp,rzp,n) — 붕괴 행 이동
- 893
배열채움(배열,n,값) —
범용 (빈 배열에 길이 설정+채움, 추가 루프 대체)
- 894
양자열스캔(QXM,열a,시작,끝) — x=1 첫 행
- 아레나 48M→144M 큐브 +
heap_ptr 47.9M→143.9M 동기화 → 배열 풀 11,691→35,137개 (연속 대형 인스턴스 힙고갈 해소. calloc 지연커밋이라 실사용분만 RSS)
- hanseonc_high.c 빌트인 테이블 등록. 빌드:
cc -O2 -o crownyc crownyc.c -lm -framework Security -framework CoreFoundation (TLS 프레임워크 필수)
- 발견: opcode 730/731
메모리마커/메모리복원 — 배열힙 회수 장치 기존재 (요청루프 회수용)
실측 (n=2000, v2→v3)
| 항목 | v2 인터프리터 | v3 네이티브 | 배율 |
|---|
| 초기화 | 8,309ms | 140ms | 59× |
| 재초기화(제자리) | 10,953ms | 61ms | 180× |
| CX 게이트 | 42.9ms | 0.48ms | 89× |
| 측정 | 33ms | 0.31ms | 106× |
| GHZ-2000 전체(게이트 2000+측정 2000) | ~160s(투영) | 1.72s | 93× |
| 무작위 클리포드 1000게이트 | ~43s(투영) | 935ms | 46× |
- RSS 570MB(불변 — 다음 지렛대=팩킹). GHZ-2000 전부동일=1, 4상프레임 레이어는 v3 위에서도 그대로 동작(합성 가능).
- Stim과의 격차: ~10⁴× → ~2.5×10³× (남은 격차 = 팩킹 30~60× + 호출 오버헤드). 다음 단계에서 ~50× 이내 진입 가능.
정확성 회귀
v1 데모(결정론 5종)·v2 GHZ-40·프레임 EPR/GHZ·JSON/배열 사니티 전부 통과. 기존 .toau 바이너리 호환 유지.
관련 파일
libs/양자스테빌라이저3.한선 (opcode 890~894의 한선씨 동반 정본) — intent 양자_스테빌라이저_네이티브opcode_v3 DB 3곳
- crownyc.c / hanseonc_high.c (백업 .bak-양자opcode) · 지식셀 #20513
- 벤치: scratchpad 양자v3플래그십.한선
잔여
① 비트/트릿 팩킹 opcode(행=워드배열, 30~60×) ② 파울리 4상 인코딩(2트릿/파울리) ③ 게이트 호출 오버헤드(배치 게이트 opcode) ④ Stim 역테이블로 ⑤ game/quantum 서비스화 ⑥ 큐트리트 Z₃ 트랙