이 페이지가 말하는 것과 말하지 않는 것
아래 조건에서 CV-GEMV r14(타이밍 규칙에 따라 Nangate45은 PAIR_REG = 0, ASAP7은 PAIR_REG = 1)이 표에 있는 공개 설계 가운데(VTA tuned·carry-save 줄 포함) 셀 면적당 처리량이 가장 높고, 유효 곱셈-누산당 에너지가 가장 낮고, 유효 곱셈-누산당 읽는 비트가 가장 적습니다. Nangate45와 ASAP7 두 공정에서 그렇고, 결과는 비트 단위로 정확합니다.
제조 가능한 오픈 PDK 세 곳의 판정은 따로 있습니다(아래). 같은 방법으로 쟀을 때 CV-GEMV의 수 형식은 128열 그룹 INT4와 MXFP4보다 모델 정확도 손실이 작습니다.
규칙 변경(2026-11-07): 이 판정은 r7 대신 최신 CV-GEMV 리비전을 대상으로 합니다. (가) 규칙을 쓸 때 두 공정의 r8·r9 결과가 이미 공개돼 있었고, (나) 대신 tuned VTA 두 줄을 더해 비교 기준을 올렸으며, (다) r7 판정과 검토 두 차례는 이 페이지에 기록으로 남깁니다.
경과: 이전 판정(CV-GEMV r7, Nangate45은 r7c, ASAP7은 r7r, 그때 공개된 비교 상대)은 도달했고 1차 지적을 고친 뒤 2차 검토에서 확인됐습니다. 지금 표에 있는 VTA의 가장 좋은 줄(tuned·carry-save 포함)과 비교하면 r7은 Nangate45 M1 -3.3%, M2 -9.5%, ASAP7 M1 -6.9%, M2 -5.2%입니다.
다른 문제(배치 행렬 곱, 합성곱, 학습), 다시 돌릴 수 없는 상용 IP, GPU, 제조한 실리콘에 대해서는 아무것도 주장하지 않습니다. CV-GEMV가 지거나 근소하게 이기는 곳은 차이가 작은 곳에 적었습니다.
상태: ‘도달’(관문과 지표 모두 통과). 작성자와 다른 계열의 모델 검토자가 확인했습니다.
문제와 조건
- 작업: WikiText-2 시험 토큰에서 Qwen2.5-0.5B 층 12
mlp.down_proj(896 × 4864). 토큰당 유효 곱셈-누산 4,358,144개. - 산술: 부호 있는 INT4 가중치, 32열마다 부호 있는 INT4 영점과 부호 없는 8비트 정수 스케일, 부호 있는 INT8 활성값, 행마다 정확한 정수 결과. W4A8 엔진은 모두 같은 정수를 계산합니다(W8A8 기준선은 행별 INT8 가중치를 따로 쓰며 기준선으로 표시합니다). 엔진이 그룹 스케일이나 행 합을 스스로 못 하면 호스트가 하고, 그 일은 엔진 몫에 넣지 않습니다.
- 모든 엔진을 같은 최대치, 사이클당 곱셈-누산 64개로 맞췄습니다.
- 흐름: 고정한 컨테이너 이미지 하나의 OpenROAD-flow-scripts, 모든 엔진에 같은 제약 형태와 이용률 목표. ASAP7(typical, RVT) 1000 ps, Nangate45(typical) 4.0 ns.
- 전력: 라우팅한 넷리스트마다 같은 층의 실제 토큰을 게이트 수준으로 재생하고(출력 전부 확인), 그 스위칭 활동을 추출 기생과 함께 목표 클록에서 OpenSTA에 넣었습니다. 대부분의 엔진은 처음 두 토큰을 재생하고, 배치 1 재생이 약 여덟 배 긴 TPU와 Gemmini는 첫 토큰만 재생했습니다. 둘째 토큰으로 바꿔 재생해도 두 엔진의 에너지는 최대 0.04%만 달라집니다(확인). 에너지는 엔진마다 자기 구간의 유효 작업으로 나눕니다.
- 모든 엔진에서 뺀 것: 저장소(SRAM), I/O 패드, 다중 코너 사인오프, 호스트 일. 큰 누산기나 부분합을 엔진 밖에 두는 비교 상대가 많아, 이 제외는 비교 상대에게 유리합니다.
- 목표 클록을 못 맞춘 설계는 처리량을 자기 최소 주기로 계산합니다.
엔진
- Apache TVM VTA 행렬-벡터 코어(Apache-2.0, d4a15f6). Chisel 원본에서 만든 공식 모듈과, 무작위 20만 사이클에서 공식 모듈과 같았던 레지스터 단위 손 이식판. 2026-11-07부터는 CV-GEMV가 r9·r10에서 받은 변경 가운데 VTA 구조에 해당하는 세 가지(누산 파이프 레지스터의 로드 인에이블 제거, VTA 인터페이스 기준 정확한 폭, 5비트 Booth MAC)를 적용한 tuned 판 두 개도 넣었습니다(검증과 diff). 교차 검토 3차가 CV-GEMV r10·r11에는 carry-save 트리가 있고 VTA에는 없다고 지적한 뒤, tuned 판에 carry-save 트리까지 넣은 두 판도 더했습니다(MAC마다 Booth 부분곱을, 행마다 곱 8개와 누산값을 carry-save로 모아 덧셈은 한 번씩; 같은 검증, 검증과 diff). 파이프라인 단계·유효 결과 지연·결과는 모두 그대로입니다. 지표마다 여섯 줄 가운데 가장 좋은 줄로 VTA를 계산합니다. VTA에 적용하지 않은 것(규칙 2026-11-08 06:57): CV-GEMV r13·r14는 곱셈기에 들어가는 레지스터 앞에서 배율을 Booth 자릿수로 바꿉니다. VTA의 가중치도 MAC 앞에서 입력 레지스터를 지나지만, tuned·carry-save VTA 줄의 셋업 최악 경로는 다섯 공정 모두 MAC 뒤에서 시작해 누산 출력에서 끝나므로, 같은 손질은 VTA의 클록을 줄일 수 없고 MAC 64개 모두에 레지스터 비트만 더합니다. CV-GEMV의 r8~r14는 CV-GEMV 자신의 GF180MCU 타이밍을 보고 골랐습니다.
- OpenGeMM BlockGemm(KU Leuven MICAS, Apache-2.0), 1 × 8 × 8, 고치지 않은 Chisel 원본에서 생성.
- Gemmini 공간 배열(UC Berkeley, BSD-3-Clause), 8 × 8, 가중치 고정, Chipyard SoC 밖에서 고치지 않은 Chisel 원본으로 생성.
- LogikBench TPU 행렬 장치(Zero ASIC, MIT), 8 × 8, OpenROAD-flow-scripts에 들어 있는 그대로.
- 기본 W8A8 GEMV, 같은 최대치·같은 메모리 방식으로 저희가 쓴 교과서식 엔진. 기준선으로 표시합니다.
- CV-GEMV, 이 IP. RTL은 평가 계약으로 제공하고, 라우팅 보고서·기록·전력 파일은 여기에 공개합니다.
두 시스톨릭 배열(TPU, Gemmini)은 행렬-행렬 작업용입니다. 배치 1에서는 8열 중 1열만 일하므로 수치가 다른 엔진과 크게 차이 납니다. 가장 자주 인용되는 공개 기준이라 넣었습니다.
결과
★는 규칙이 공정마다 정해 둔 CV-GEMV 설정입니다. 모든 수치는 그 줄의 원자료 폴더로 이어집니다.
Nangate45, 4.0 ns
| 엔진 | M1 GMAC/s/mm² ↑ | M2 유효 MAC당 pJ ↓ | M3 MAC당 읽은 비트 ↓ | 목표 클록 | 셀 면적 (µm²) | 토큰당 사이클 | 최소 주기 (ns) | 배선 DRC | 재생 |
|---|---|---|---|---|---|---|---|---|---|
| CV-GEMV r14, PAIR_REG = 0 ★ | 627.7 | 0.695 | 5.38 | 충족 | 25,117.8 | 69,104 | 1.980 | 0 | PASS |
| CV-GEMV r14, PAIR_REG = 1 | 554.3 | 0.812 | 5.38 | 충족 | 28,397.6 | 69,216 | 1.250 | 0 | PASS |
| CV-GEMV r13, PAIR_REG = 0 | 627.5 | 0.696 | 5.38 | 충족 | 25,124.5 | 69,104 | 1.960 | 0 | PASS |
| CV-GEMV r13, PAIR_REG = 1 | 553.2 | 0.812 | 5.38 | 충족 | 28,454.6 | 69,216 | 1.340 | 0 | PASS |
| CV-GEMV r12, PAIR_REG = 0 | 630.6 | 0.683 | 5.38 | 충족 | 25,004.5 | 69,104 | 1.970 | 0 | PASS |
| CV-GEMV r12, PAIR_REG = 1 | 553.5 | 0.807 | 5.38 | 충족 | 28,437 | 69,216 | 1.400 | 0 | PASS |
| CV-GEMV r11, PAIR_REG = 0 | 617.5 | 0.697 | 5.38 | 충족 | 25,533.1 | 69,104 | 1.870 | 0 | PASS |
| CV-GEMV r11, PAIR_REG = 1 | 547.7 | 0.818 | 5.38 | 충족 | 28,739.4 | 69,216 | 1.220 | 0 | PASS |
| CV-GEMV r10, PAIR_REG = 0 | 618.5 | 0.708 | 5.38 | 충족 | 25,491 | 69,104 | 1.980 | 0 | PASS |
| CV-GEMV r10, PAIR_REG = 1 | 543.0 | 0.843 | 5.38 | 충족 | 28,991.6 | 69,216 | 1.270 | 0 | PASS |
| CV-GEMV r9, PAIR_REG = 0 | 546.8 | 0.716 | 5.38 | 충족 | 28,833.3 | 69,104 | 1.790 | 0 | PASS |
| CV-GEMV r9, PAIR_REG = 1 | 487.5 | 0.854 | 5.38 | 충족 | 32,291.6 | 69,216 | 1.240 | 0 | PASS |
| CV-GEMV r8, PAIR_REG = 0 | 525.9 | 0.731 | 5.38 | 충족 | 29,981.1 | 69,104 | 1.780 | 0 | PASS |
| CV-GEMV r8, PAIR_REG = 1 | 454.9 | 0.902 | 5.38 | 충족 | 34,606.3 | 69,216 | 1.510 | 0 | PASS |
| CV-GEMV r7, PAIR_REG = 0 | 459.3 | 0.833 | 5.38 | 충족 | 34,381 | 68,992 | 2.050 | 0 | PASS |
| CV-GEMV r7, PAIR_REG = 1 | 421.1 | 0.955 | 5.38 | 충족 | 37,445.9 | 69,104 | 1.750 | 0 | PASS |
| CV-GEMV r1 (처음 잰 판) | 262.6 | 1.283 | 5.38 | 충족 | 60,234.9 | 68,880 | 2.400 | 0 | PASS |
| VTA 행렬-벡터 코어, 공식 모듈 tuned + carry-save | 468.2 | 0.923 | 6.00 | 충족 | 34,175.7 | 68,097 | 1.670 | 0 | PASS |
| VTA 행렬-벡터 코어, 손 이식판 tuned + carry-save | 475.2 | 0.921 | 6.00 | 충족 | 33,668.4 | 68,097 | 1.690 | 0 | PASS |
| VTA 행렬-벡터 코어, 공식 모듈 tuned | 455.9 | 0.961 | 6.00 | 충족 | 35,098.4 | 68,097 | 1.770 | 0 | PASS |
| VTA 행렬-벡터 코어, 손 이식판 tuned | 472.9 | 0.965 | 6.00 | 충족 | 33,833.9 | 68,097 | 2.110 | 0 | PASS |
| VTA 행렬-벡터 코어, 공식 생성 모듈 | 447.0 | 0.956 | 6.00 | 충족 | 35,793.2 | 68,097 | 2.080 | 0 | PASS |
| VTA 행렬-벡터 코어, 손 이식판 | 443.4 | 0.986 | 6.00 | 충족 | 36,086.1 | 68,097 | 2.320 | 0 | PASS |
| OpenGeMM BlockGemm 1 × 8 × 8 | 313.4 | 1.149 | 6.00 | 충족 | 51,057.4 | 68,098 | 3.400 | 0 | PASS |
| 기본 W8A8 GEMV (기준선) | 316.3 | 1.265 | 9.00 | 충족 | 50,170.5 | 68,656 | 1.300 | 0 | PASS |
| LogikBench TPU MXU 8 × 8 | 26.9 | 8.289 | 8.07 | 충족 | 72,571.7 | 558,752 | 1.780 | 0 | PASS |
| Gemmini 메시 8 × 8, 가중치 고정 | 27.6 | 7.969 | 8.07 | 충족 | 72,550.4 | 544,793 | 1.470 | 0 | PASS |
ASAP7, 1000 ps
| 엔진 | M1 GMAC/s/mm² ↑ | M2 유효 MAC당 pJ ↓ | M3 MAC당 읽은 비트 ↓ | 목표 클록 | 셀 면적 (µm²) | 토큰당 사이클 | 최소 주기 (ns) | 배선 DRC | 재생 |
|---|---|---|---|---|---|---|---|---|---|
| CV-GEMV r14, PAIR_REG = 0 | 26,870.6 | 0.138 | 5.38 | 미충족, 950 MHz로 계산 | 2,228.8 | 69,104 | 1.053 | 0 | PASS |
| CV-GEMV r14, PAIR_REG = 1 ★ | 27,686.4 | 0.150 | 5.38 | 충족 | 2,274.2 | 69,216 | 0.806 | 0 | PASS |
| CV-GEMV r13, PAIR_REG = 0 | 26,280.3 | 0.138 | 5.38 | 미충족, 923 MHz로 계산 | 2,214.2 | 69,104 | 1.084 | 0 | PASS |
| CV-GEMV r13, PAIR_REG = 1 | 27,973.5 | 0.151 | 5.38 | 충족 | 2,250.9 | 69,216 | 0.847 | 0 | PASS |
| CV-GEMV r12, PAIR_REG = 0 | 26,573.9 | 0.138 | 5.38 | 미충족, 934 MHz로 계산 | 2,217.4 | 69,104 | 1.070 | 0 | PASS |
| CV-GEMV r12, PAIR_REG = 1 | 28,261.6 | 0.148 | 5.38 | 충족 | 2,227.9 | 69,216 | 0.832 | 0 | PASS |
| CV-GEMV r11, PAIR_REG = 0 | 27,089.3 | 0.137 | 5.38 | 미충족, 959 MHz로 계산 | 2,232.3 | 69,104 | 1.043 | 0 | PASS |
| CV-GEMV r11, PAIR_REG = 1 | 27,801.3 | 0.150 | 5.38 | 충족 | 2,264.8 | 69,216 | 0.824 | 0 | PASS |
| CV-GEMV r10, PAIR_REG = 0 | 25,320.4 | 0.140 | 5.38 | 미충족, 899 MHz로 계산 | 2,239.5 | 69,104 | 1.112 | 0 | PASS |
| CV-GEMV r10, PAIR_REG = 1 | 27,528.6 | 0.152 | 5.38 | 충족 | 2,287.2 | 69,216 | 0.838 | 0 | PASS |
| CV-GEMV r9, PAIR_REG = 0 | 28,398.5 | 0.131 | 5.38 | 충족 | 2,220.8 | 69,104 | 0.963 | 0 | PASS |
| CV-GEMV r9, PAIR_REG = 1 | 25,790.1 | 0.154 | 5.38 | 충족 | 2,441.4 | 69,216 | 0.825 | 0 | PASS |
| CV-GEMV r8, PAIR_REG = 0 | 26,945.0 | 0.135 | 5.38 | 충족 | 2,340.6 | 69,104 | 0.981 | 0 | PASS |
| CV-GEMV r8, PAIR_REG = 1 | 23,886.8 | 0.162 | 5.38 | 충족 | 2,635.9 | 69,216 | 0.922 | 0 | PASS |
| CV-GEMV r7, PAIR_REG = 0 | 20,304.7 | 0.156 | 5.38 | 미충족, 909 MHz로 계산 | 2,828.6 | 68,992 | 1.100 | 0 | PASS |
| CV-GEMV r7, PAIR_REG = 1 | 21,849.1 | 0.170 | 5.38 | 충족 | 2,886.5 | 69,104 | 0.977 | 0 | PASS |
| CV-GEMV r1 (처음 잰 판) | 11,259.4 | 0.238 | 5.38 | 미충족, 840 MHz로 계산 | 4,719.8 | 68,880 | 1.191 | 0 | PASS |
| VTA 행렬-벡터 코어, 공식 모듈 tuned + carry-save | 23,123.6 | 0.180 | 6.00 | 충족 | 2,767.7 | 68,097 | 0.993 | 0 | PASS |
| VTA 행렬-벡터 코어, 손 이식판 tuned + carry-save | 23,478.5 | 0.179 | 6.00 | 충족 | 2,725.9 | 68,097 | 0.983 | 0 | PASS |
| VTA 행렬-벡터 코어, 공식 모듈 tuned | 22,153.9 | 0.190 | 6.00 | 충족 | 2,888.8 | 68,097 | 0.984 | 0 | PASS |
| VTA 행렬-벡터 코어, 손 이식판 tuned | 19,314.6 | 0.193 | 6.00 | 미충족, 857 MHz로 계산 | 2,838.1 | 68,097 | 1.167 | 0 | PASS |
| VTA 행렬-벡터 코어, 공식 생성 모듈 | 20,193.7 | 0.192 | 6.00 | 미충족, 917 MHz로 계산 | 2,906.2 | 68,097 | 1.091 | 0 | PASS |
| VTA 행렬-벡터 코어, 손 이식판 | 17,243.7 | 0.197 | 6.00 | 미충족, 800 MHz로 계산 | 2,970.2 | 68,097 | 1.250 | 0 | PASS |
| OpenGeMM BlockGemm 1 × 8 × 8 | 7,544.9 | 0.240 | 6.00 | 미충족, 534 MHz로 계산 | 4,532.5 | 68,098 | 1.871 | 0 | PASS |
| 기본 W8A8 GEMV (기준선) | 16,489.8 | 0.232 | 9.00 | 충족 | 3,849.5 | 68,656 | 0.803 | 0 | PASS |
| LogikBench TPU MXU 8 × 8 | 1,395.6 | 1.616 | 8.07 | 미충족, 996 MHz로 계산 | 5,567.5 | 558,752 | 1.004 | 0 | PASS |
| Gemmini 메시 8 × 8, 가중치 고정 | 1,431.3 | 1.570 | 8.07 | 충족 | 5,589.1 | 544,793 | 0.980 | 0 | PASS |
M1 = 표준 셀 면적 1 mm²당 초당 유효 곱셈-누산. M2 = 작업 전력 × 재생 구간 ÷ 유효 곱셈-누산. M3 = 유효 곱셈-누산 하나에 엔진이 읽어야 하는 비트(가중치, 그룹 데이터, 활성값). 줄마다 계산 근거가 JSON에 있습니다.
설계 개선 전과 후
처음 잰 CV-GEMV(r1)는 VTA에 졌습니다. 그 뒤 평범한 설계 작업(리타이밍, 그룹 스케일 곱셈기를 여러 행이 나눠 쓰기, 카운터 폭 줄이기, 영점을 레인 밖으로 빼기, 로드 인에이블 없는 레지스터, 정확한 폭, Booth 부호화, carry-save 레지스터)으로 r2부터 r14까지 고쳤고, 단계마다 블록 단위로 r1과 같은 결과를 내는지 확인했습니다. Nangate45에서 면적당 처리량은 262.6에서 627.7 GMAC/s/mm²로, 에너지는 1.283에서 0.695 pJ로 바뀌었습니다. ASAP7에서 r1은 1000 ps를 못 맞췄고(840 MHz로 계산) r14은 맞춥니다. 비교 상대는 공개된 기본 구조를 그대로 쓰고, 가장 강한 VTA는 같은 종류의 일반 손질을 한 판도 함께 넣었습니다.
차이가 작은 곳, CV-GEMV가 지는 곳
- VTA의 가장 좋은 줄 대비 면적당 처리량: Nangate45(VTA 손 이식판 tuned + carry-save) +32.1%, ASAP7(VTA 손 이식판 tuned + carry-save) +17.9%. 통과선은 ±1% 안을 동률로 봅니다.
- 토큰당 사이클은 VTA가 적습니다(68,097 대 69,104).
- Nangate45: 최소 주기는 CV-GEMV r14(1.980 ns)이 가장 짧지 않습니다. 기본 W8A8 GEMV (기준선)가 1.300 ns로 더 짧습니다.
- ASAP7: 최소 주기는 CV-GEMV r14(0.806 ns)이 가장 짧지 않습니다. 기본 W8A8 GEMV (기준선)가 0.803 ns로 더 짧습니다.
- PAIR_REG 설정은 타이밍 규칙(목표 클록을 맞추면 0, 아니면 1)으로 정하며, 이 규칙은 r14 결과 전에 썼습니다. 다른 설정도 표에 있습니다.
- VTA의 가장 좋은 줄 대비 유효 곱셈-누산당 에너지: Nangate45 -24.5%, ASAP7 -16.2%.
- 정확도: CV-GEMV 형식은 같은 형식에 실수 스케일을 쓴 경우와 거의 같습니다(+14.1% 대 +14.0%). 더 낫지 않습니다.
- 공유 흐름 설정 변형 네 가지에서 VTA 가장 좋은 줄 대비 가장 작은 우위: Nangate45 M1 +32.1%, M2 -24.2%, ASAP7 M1 +17.6%, M2 -15.4%(흐름 설정).
- 투영 11개를 더 잰 결과(다른 층·모델) 가장 좋은 비교 줄 대비 가장 작은 우위: Nangate45 M1 +27.4%, M2 -22.9%, ASAP7 M1 +13.4%, M2 -14.3%, SKY130HD M1 +14.6%, M2 -20.5%(투영 9개: 2,432 × 896 CV-GEMV 빌드가 라우팅되지 않아 gate_proj·up_proj에는 CV-GEMV 줄이 없음), GF180MCU M1 +46.4%, M2 -2.6%, IHP SG13G2 M1 +14.5%, M2 -26.2%(다른 층·모델).
- 사이클당 256 MAC에서 256 MAC 비교 줄 중 가장 좋은 줄 대비: Nangate45 M1 +12.3%, M2 +4.1%, ASAP7 M1 -7.9%, M2 +26.0%, SKY130HD M1 +0.9%, M2 +12.9%, GF180MCU M1 +32.2%, M2 +25.7%, IHP SG13G2 M1 +5.6%, M2 -1.8%(네 배 크기).
- 뒤 리비전 r15를 사이클당 256 MAC, 16행 × 16열로 빌드한 결과(판정 대상 아님), 같은 256 MAC 비교 줄 대비: Nangate45 M1 +26.9%, M2 -4.2%, ASAP7 M1 +9.4%, M2 +4.3%, SKY130HD M1 +18.1%, M2 -2.6%, GF180MCU M1 +36.1%, M2 +21.3%, IHP SG13G2 M1 +15.4%, M2 -13.0%(256 MAC의 다른 모양).
제조 가능한 오픈 PDK: 도달하지 못함
같은 비교를, 첫 오픈 PDK 결과 전에 정한 조건으로(이후 변경은 규칙에 날짜와 함께 적음), 오픈 셔틀로 실제 제조할 수 있는 세 공정에서 했습니다. SKY130HD, GF180MCU, IHP SG13G2이고 목표는 모두 8.0 ns(OpenROAD-flow-scripts가 각 공정의 ibex 기준 설계에 두는 클록)입니다. CV-GEMV 설정은 미리 정했습니다(8.0 ns를 맞추면 PAIR_REG = 0). 같은 코드로 낸 결과: 도달하지 못함.
- GF180MCU: CV-GEMV를 포함해 어떤 엔진도 8.0 ns를 맞추지 못해(CV-GEMV는 0.016 ns 모자람) 타이밍 관문에서 걸립니다.
- IHP SG13G2: 고정 이미지의 IHP 플랫폼 파일이 동치 검사용 넷리스트에서 표준 셀을 모두 빼서, 흐름의 검사는 모든 엔진에서 빈 넷리스트끼리 비교했습니다(흐름이 그 검사를 돌린 IHP 줄 전부, TPU는 흐름의 검사 기록 자체가 없음). 2026-11-07 09:13 규칙에 따라 여기 G2는 같은 검사기를 흐름의 방식대로, 같은 데이터베이스에서 본드 패드 패턴만 빼고 다시 쓴 넷리스트에 돌린 결과입니다: 동일(lec.txt, 흐름의 원래 기록은 lec-flow.txt).
- 다른 기계(G4): 33줄 중 33줄 재현, 차이 0건(표).
- 유효 MAC당 읽는 비트(M3), 비트 단위 정확성, 모델 정확도는 공정과 무관해 그대로 통과입니다.
경과: r7로는 이 공정들에서 면적당 처리량이 VTA에 5.6%(SKY130HD), 17.5%(IHP) 졌습니다. r8은 영점 빼기를 레인 64개에서 꺼내고(표준 항등식 Σ(w−zp)x = Σwx − zp·Σx) 성능 카운터를 뺐습니다. r1과 블록 단위로 같고 실제 층에서 비트 단위로 맞으며, 규칙이 r8 결과 전에 이 판정의 주체로 정해 두었습니다. r8로 SKY130HD와 IHP는 모든 지표를 통과했고, GF180MCU에서는 8.0 ns를 맞추지 못했으며(9.37 ns) 에너지가 VTA와 동률이었습니다. r9는 유효 신호가 있을 때만 읽는 레지스터 앞의 로드 인에이블 다중화기를 없애고(GF180MCU 라이브러리에는 인에이블 플립플롭이 없어 인에이블마다 다중화기가 됩니다), 대기 중인 그룹 결과를 단계마다 한 행씩 밀어 고르는 회로를 없앴으며, 레지스터마다 정확한 폭을 줬습니다. 결과와 사이클 수는 r8과 같고, 규칙이 r9 결과 전에 r9를 판정 대상으로 정해 두었습니다. r9로 세 공정 모두에서 모든 지표를 통과했고 GF180MCU는 8.05 ns였습니다. r10은 레인 가중치를 radix-4 Booth 자릿수로 바꾸고, 페어 합을 두 부분으로 나눠 그 사이 자리올림을 1비트로 저장했으며, 활성값 합을 carry-save로 두었습니다. PAIR_REG = 0 레이아웃은 줄었지만(SKY130HD -7%, IHP -11%) 페어 레지스터 다음 단계가 느려져 GF180MCU는 9.15 ns가 됐습니다. r11은 그 단계를 carry-save 트리 하나로 다시 짜고 배율 곱을 예전 방식으로 되돌렸고, GF180MCU는 8.48 ns였습니다. r12는 네 페어 합을 서로 다른 비트에서 나눠 자리올림이 세는 덧셈 없이 그룹 트리로 들어가게 하고, 배율 곱을 carry-save 트리로 직접 짜고, 행 누적기 비우기를 레지스터에서 냈습니다: 8.08 ns. r13은 배율을 복사할 때 radix-4 Booth 자릿수로 바꿔(carry-save 4단 → 3단) 받고, 페어 분할 위치를 옮겨 위쪽 덧셈이 r11보다 넓지 않게 했습니다: 8.01 ns. r14는 그 자릿수를 원-핫으로 담아 부분곱 비트마다 AND-OR 한 단이 되게 했습니다: 8.02 ns. 규칙상 대상은 가장 빨리 닫힌 판이 아니라 최신 판(r14)입니다. 2026-11-07에는 VTA에도 tuned 두 줄이 더해져 모든 공정에서 기준이 올라갔습니다. 이 판정이 도달하기 전까지 위의 주장은 Nangate45와 ASAP7로 한정합니다.
시도 횟수: r2부터 r14까지 모두 이 비교를 위해 만든 판입니다(r1은 처음 잰 판). 그중 GF180MCU로 잰 것은 8개(r7~r14)입니다. 판마다 규칙을 결과 전에 커밋했지만, 시도가 늘수록 우연히 목표를 맞춘 판을 고를 위험도 커지므로 모든 판을 summary.json에 남깁니다(이 페이지 표에는 r1과 r7~r14을 표시). 판별 GF180MCU 최소 주기(두 설정 중 짧은 쪽, 목표 8.0 ns): r7 10.90 ns, r8 9.37 ns, r9 8.05 ns, r10 9.15 ns, r11 8.48 ns, r12 8.08 ns, r13 8.01 ns, r14 8.02 ns.
SKY130HD, 8.0 ns
| 엔진 | M1 GMAC/s/mm² ↑ | M2 유효 MAC당 pJ ↓ | M3 MAC당 읽은 비트 ↓ | 목표 클록 | 셀 면적 (µm²) | 토큰당 사이클 | 최소 주기 (ns) | 배선 DRC | 재생 |
|---|---|---|---|---|---|---|---|---|---|
| CV-GEMV r14, PAIR_REG = 0 ★ | 57.3 | 3.733 | 5.38 | 충족 | 137,696 | 69,104 | 7.520 | 0 | PASS |
| CV-GEMV r14, PAIR_REG = 1 | 53.2 | 4.561 | 5.38 | 충족 | 147,811 | 69,216 | 5.160 | 0 | PASS |
| CV-GEMV r13, PAIR_REG = 0 | 56.8 | 3.749 | 5.38 | 충족 | 138,679 | 69,104 | 7.560 | 0 | PASS |
| CV-GEMV r13, PAIR_REG = 1 | 53.3 | 4.524 | 5.38 | 충족 | 147,544 | 69,216 | 5.480 | 0 | PASS |
| CV-GEMV r12, PAIR_REG = 0 | 56.1 | 3.797 | 5.38 | 충족 | 140,428 | 69,104 | 7.800 | 0 | PASS |
| CV-GEMV r12, PAIR_REG = 1 | 54.0 | 4.440 | 5.38 | 충족 | 145,706 | 69,216 | 5.280 | 0 | PASS |
| CV-GEMV r11, PAIR_REG = 0 | 56.4 | 3.756 | 5.38 | 충족 | 139,750 | 69,104 | 7.490 | 0 | PASS |
| CV-GEMV r11, PAIR_REG = 1 | 53.6 | 4.430 | 5.38 | 충족 | 146,893 | 69,216 | 5.270 | 0 | PASS |
| CV-GEMV r10, PAIR_REG = 0 | 56.2 | 3.842 | 5.38 | 충족 | 140,156 | 69,104 | 7.490 | 0 | PASS |
| CV-GEMV r10, PAIR_REG = 1 | 53.1 | 4.490 | 5.38 | 충족 | 148,217 | 69,216 | 5.650 | 0 | PASS |
| CV-GEMV r9, PAIR_REG = 0 | 52.3 | 3.791 | 5.38 | 충족 | 150,770 | 69,104 | 7.100 | 0 | PASS |
| CV-GEMV r9, PAIR_REG = 1 | 47.0 | 4.547 | 5.38 | 충족 | 167,351 | 69,216 | 5.300 | 0 | PASS |
| CV-GEMV r8, PAIR_REG = 0 | 50.2 | 3.910 | 5.38 | 충족 | 156,951 | 69,104 | 7.180 | 0 | PASS |
| CV-GEMV r8, PAIR_REG = 1 | 44.9 | 4.647 | 5.38 | 충족 | 175,298 | 69,216 | 6.960 | 0 | PASS |
| CV-GEMV r7, PAIR_REG = 0 | 41.0 | 4.475 | 5.38 | 미충족, 124 MHz로 계산 | 191,397 | 68,992 | 8.050 | 0 | PASS |
| CV-GEMV r7, PAIR_REG = 1 | 40.9 | 5.039 | 5.38 | 충족 | 192,856 | 69,104 | 7.250 | 0 | PASS |
| VTA 행렬-벡터 코어, 공식 모듈 tuned + carry-save | 47.3 | 4.877 | 6.00 | 충족 | 169,304 | 68,097 | 7.560 | 0 | PASS |
| VTA 행렬-벡터 코어, 손 이식판 tuned + carry-save | 45.6 | 5.078 | 6.00 | 충족 | 175,595 | 68,097 | 7.720 | 0 | PASS |
| VTA 행렬-벡터 코어, 공식 모듈 tuned | 44.8 | 5.242 | 6.00 | 충족 | 178,604 | 68,097 | 7.150 | 0 | PASS |
| VTA 행렬-벡터 코어, 손 이식판 tuned | 45.8 | 5.185 | 6.00 | 미충족, 123 MHz로 계산 | 171,523 | 68,097 | 8.150 | 0 | PASS |
| VTA 행렬-벡터 코어, 공식 생성 모듈 | 43.3 | 5.199 | 6.00 | 충족 | 184,687 | 68,097 | 7.960 | 0 | PASS |
| VTA 행렬-벡터 코어, 손 이식판 | 36.9 | 5.840 | 6.00 | 미충족, 117 MHz로 계산 | 202,297 | 68,097 | 8.570 | 0 | PASS |
| OpenGeMM BlockGemm 1 × 8 × 8 | 16.6 | 6.897 | 6.00 | 미충족, 80 MHz로 계산 | 307,700 | 68,098 | 12.560 | 0 | PASS |
| 기본 W8A8 GEMV (기준선) | 30.8 | 6.537 | 9.00 | 충족 | 257,761 | 68,656 | 5.870 | 0 | PASS |
| LogikBench TPU MXU 8 × 8 | 2.6 | 52.207 | 8.07 | 충족 | 372,577 | 558,752 | 7.670 | 0 | PASS |
| Gemmini 메시 8 × 8, 가중치 고정 | 2.7 | 52.755 | 8.07 | 충족 | 367,336 | 544,793 | 6.960 | 0 | PASS |
GF180MCU (9-track, 5 V), 8.0 ns
| 엔진 | M1 GMAC/s/mm² ↑ | M2 유효 MAC당 pJ ↓ | M3 MAC당 읽은 비트 ↓ | 목표 클록 | 셀 면적 (µm²) | 토큰당 사이클 | 최소 주기 (ns) | 배선 DRC | 재생 |
|---|---|---|---|---|---|---|---|---|---|
| CV-GEMV r14, PAIR_REG = 0 | 7.1 | 104.629 | 5.38 | 미충족, 81 MHz로 계산 | 718,848 | 69,104 | 12.360 | 0 | PASS |
| CV-GEMV r14, PAIR_REG = 1 ★ | 10.9 | 111.268 | 5.38 | 미충족, 125 MHz로 계산 | 720,068 | 69,216 | 8.020 | 0 | PASS |
| CV-GEMV r13, PAIR_REG = 0 | 6.7 | 104.115 | 5.38 | 미충족, 77 MHz로 계산 | 724,561 | 69,104 | 12.970 | 0 | PASS |
| CV-GEMV r13, PAIR_REG = 1 | 11.0 | 109.929 | 5.38 | 미충족, 125 MHz로 계산 | 717,299 | 69,216 | 8.010 | 0 | PASS |
| CV-GEMV r12, PAIR_REG = 0 | 6.9 | 101.016 | 5.38 | 미충족, 78 MHz로 계산 | 710,824 | 69,104 | 12.810 | 0 | PASS |
| CV-GEMV r12, PAIR_REG = 1 | 10.8 | 110.803 | 5.38 | 미충족, 124 MHz로 계산 | 719,091 | 69,216 | 8.080 | 0 | PASS |
| CV-GEMV r11, PAIR_REG = 0 | 7.1 | 101.824 | 5.38 | 미충족, 80 MHz로 계산 | 709,015 | 69,104 | 12.550 | 0 | PASS |
| CV-GEMV r11, PAIR_REG = 1 | 10.3 | 110.659 | 5.38 | 미충족, 118 MHz로 계산 | 724,027 | 69,216 | 8.480 | 0 | PASS |
| CV-GEMV r10, PAIR_REG = 0 | 6.8 | 105.965 | 5.38 | 미충족, 81 MHz로 계산 | 752,630 | 69,104 | 12.270 | 0 | PASS |
| CV-GEMV r10, PAIR_REG = 1 | 8.9 | 118.699 | 5.38 | 미충족, 109 MHz로 계산 | 772,257 | 69,216 | 9.150 | 0 | PASS |
| CV-GEMV r9, PAIR_REG = 0 | 7.8 | 94.889 | 5.38 | 미충족, 87 MHz로 계산 | 706,100 | 69,104 | 11.450 | 0 | PASS |
| CV-GEMV r9, PAIR_REG = 1 | 9.8 | 115.196 | 5.38 | 미충족, 124 MHz로 계산 | 801,573 | 69,216 | 8.050 | 0 | PASS |
| CV-GEMV r8, PAIR_REG = 0 | 7.4 | 100.956 | 5.38 | 미충족, 90 MHz로 계산 | 759,632 | 69,104 | 11.170 | 0 | PASS |
| CV-GEMV r8, PAIR_REG = 1 | 7.7 | 123.090 | 5.38 | 미충족, 107 MHz로 계산 | 875,652 | 69,216 | 9.370 | 0 | PASS |
| CV-GEMV r7, PAIR_REG = 0 | 5.4 | 111.060 | 5.38 | 미충족, 76 MHz로 계산 | 898,785 | 68,992 | 13.080 | 0 | PASS |
| CV-GEMV r7, PAIR_REG = 1 | 6.0 | 128.616 | 5.38 | 미충족, 92 MHz로 계산 | 970,423 | 69,104 | 10.900 | 0 | PASS |
| VTA 행렬-벡터 코어, 공식 모듈 tuned + carry-save | 7.2 | 114.736 | 6.00 | 미충족, 93 MHz로 계산 | 827,144 | 68,097 | 10.740 | 0 | PASS |
| VTA 행렬-벡터 코어, 손 이식판 tuned + carry-save | 6.8 | 118.131 | 6.00 | 미충족, 91 MHz로 계산 | 853,254 | 68,097 | 11.040 | 0 | PASS |
| VTA 행렬-벡터 코어, 공식 모듈 tuned | 6.9 | 121.701 | 6.00 | 미충족, 95 MHz로 계산 | 880,259 | 68,097 | 10.570 | 0 | PASS |
| VTA 행렬-벡터 코어, 손 이식판 tuned | 5.6 | 126.616 | 6.00 | 미충족, 75 MHz로 계산 | 863,725 | 68,097 | 13.320 | 0 | PASS |
| VTA 행렬-벡터 코어, 공식 생성 모듈 | 5.8 | 123.970 | 6.00 | 미충족, 80 MHz로 계산 | 877,772 | 68,097 | 12.550 | 0 | PASS |
| VTA 행렬-벡터 코어, 손 이식판 | 4.9 | 132.374 | 6.00 | 미충족, 71 MHz로 계산 | 919,309 | 68,097 | 14.180 | 0 | PASS |
| OpenGeMM BlockGemm 1 × 8 × 8 | 2.1 | 152.819 | 6.00 | 미충족, 43 MHz로 계산 | 1,326,380.0 | 68,098 | 23.200 | 0 | PASS |
| 기본 W8A8 GEMV (기준선) | 6.2 | 164.739 | 9.00 | 미충족, 117 MHz로 계산 | 1,204,410.0 | 68,656 | 8.530 | 0 | PASS |
| LogikBench TPU MXU 8 × 8 | 0.3 | 1080.695 | 8.07 | 미충족, 87 MHz로 계산 | 1,963,680.0 | 558,752 | 11.560 | 0 | PASS |
| Gemmini 메시 8 × 8, 가중치 고정 | 0.5 | 936.103 | 8.07 | 미충족, 109 MHz로 계산 | 1,754,110.0 | 544,793 | 9.180 | 0 | PASS |
IHP SG13G2, 8.0 ns
| 엔진 | M1 GMAC/s/mm² ↑ | M2 유효 MAC당 pJ ↓ | M3 MAC당 읽은 비트 ↓ | 목표 클록 | 셀 면적 (µm²) | 토큰당 사이클 | 최소 주기 (ns) | 배선 DRC | 재생 |
|---|---|---|---|---|---|---|---|---|---|
| CV-GEMV r14, PAIR_REG = 0 ★ | 27.7 | 3.512 | 5.38 | 충족 | 284,668 | 69,104 | 6.650 | 0 | PASS |
| CV-GEMV r14, PAIR_REG = 1 | 26.6 | 4.280 | 5.38 | 충족 | 295,381 | 69,216 | 4.570 | 0 | PASS |
| CV-GEMV r13, PAIR_REG = 0 | 28.3 | 3.470 | 5.38 | 충족 | 278,158 | 69,104 | 6.620 | 0 | PASS |
| CV-GEMV r13, PAIR_REG = 1 | 26.4 | 4.305 | 5.38 | 충족 | 297,979 | 69,216 | 4.580 | 0 | PASS |
| CV-GEMV r12, PAIR_REG = 0 | 27.6 | 3.487 | 5.38 | 충족 | 285,597 | 69,104 | 6.840 | 0 | PASS |
| CV-GEMV r12, PAIR_REG = 1 | 26.7 | 4.264 | 5.38 | 충족 | 294,499 | 69,216 | 5.090 | 0 | PASS |
| CV-GEMV r11, PAIR_REG = 0 | 27.5 | 3.487 | 5.38 | 충족 | 286,561 | 69,104 | 6.650 | 0 | PASS |
| CV-GEMV r11, PAIR_REG = 1 | 26.4 | 4.290 | 5.38 | 충족 | 297,752 | 69,216 | 4.960 | 0 | PASS |
| CV-GEMV r10, PAIR_REG = 0 | 27.2 | 3.550 | 5.38 | 충족 | 290,195 | 69,104 | 6.580 | 0 | PASS |
| CV-GEMV r10, PAIR_REG = 1 | 26.5 | 4.333 | 5.38 | 충족 | 297,168 | 69,216 | 5.170 | 0 | PASS |
| CV-GEMV r9, PAIR_REG = 0 | 24.2 | 3.852 | 5.38 | 충족 | 325,688 | 69,104 | 6.590 | 0 | PASS |
| CV-GEMV r9, PAIR_REG = 1 | 23.0 | 4.582 | 5.38 | 충족 | 342,196 | 69,216 | 5.170 | 0 | PASS |
| CV-GEMV r8, PAIR_REG = 0 | 22.9 | 4.031 | 5.38 | 충족 | 344,304 | 69,104 | 6.720 | 0 | PASS |
| CV-GEMV r8, PAIR_REG = 1 | 22.0 | 4.723 | 5.38 | 충족 | 358,166 | 69,216 | 5.630 | 0 | PASS |
| CV-GEMV r7, PAIR_REG = 0 | 16.7 | 5.244 | 5.38 | 충족 | 472,974 | 68,992 | 7.550 | 0 | PASS |
| CV-GEMV r7, PAIR_REG = 1 | 17.5 | 5.561 | 5.38 | 충족 | 450,147 | 69,104 | 6.290 | 0 | PASS |
| VTA 행렬-벡터 코어, 공식 모듈 tuned + carry-save | 23.0 | 4.978 | 6.00 | 충족 | 348,434 | 68,097 | 6.000 | 0 | PASS |
| VTA 행렬-벡터 코어, 손 이식판 tuned + carry-save | 23.3 | 4.936 | 6.00 | 충족 | 343,274 | 68,097 | 6.170 | 0 | PASS |
| VTA 행렬-벡터 코어, 공식 모듈 tuned | 20.5 | 5.269 | 6.00 | 충족 | 391,074 | 68,097 | 6.110 | 0 | PASS |
| VTA 행렬-벡터 코어, 손 이식판 tuned | 22.7 | 5.010 | 6.00 | 충족 | 353,104 | 68,097 | 6.610 | 0 | PASS |
| VTA 행렬-벡터 코어, 공식 생성 모듈 | 19.9 | 5.364 | 6.00 | 충족 | 401,910 | 68,097 | 6.940 | 0 | PASS |
| VTA 행렬-벡터 코어, 손 이식판 | 20.2 | 5.368 | 6.00 | 충족 | 395,314 | 68,097 | 7.180 | 0 | PASS |
| OpenGeMM BlockGemm 1 × 8 × 8 | 9.4 | 8.494 | 6.00 | 미충족, 125 MHz로 계산 | 855,450 | 68,098 | 8.000 | 0 | PASS |
| 기본 W8A8 GEMV (기준선) | 14.1 | 7.494 | 9.00 | 충족 | 563,778 | 68,656 | 5.160 | 0 | PASS |
| LogikBench TPU MXU 8 × 8 | 1.2 | 59.467 | 8.07 | 충족 | 847,341 | 558,752 | 5.770 | 0 | PASS |
| Gemmini 메시 8 × 8, 가중치 고정 | 1.1 | 60.888 | 8.07 | 충족 | 899,095 | 544,793 | 5.260 | 0 | PASS |
흐름 설정
확인한 범위에서 흐름은 같은 입력에 같은 결과를 냅니다. 판정에 쓰는 모든 줄을 두 번째 기계(줄마다 하나, 맥 또는 AWS)가 표의 모든 숫자까지 재현했고(관문 G4), 주 판정 22줄 중 22줄은 라우팅 넷리스트까지 같았습니다(second-machine.json). 여기서도 공개한 설정으로 AWS에서 다시 돌린 ASAP7 3줄이 모든 숫자를 재현했습니다. 그래서 무작위 시드 대신, 모든 엔진이 함께 쓰는 설정 두 가지(코어 이용률, 배치 밀도 여유)를 조금씩 바꿔 우위가 유지되는지 시험했습니다. 줄과 변형은 실행 전에 정했습니다(규칙 2026-11-07 14:34). 공정마다 CV-GEMV 대상과, 그 공정 VTA 최고 M1·M2의 5% 안에 드는 VTA 줄 전부(21줄)에 변형마다 같은 설정을 넣고, AWS 인스턴스에서 흐름·재생·전력을 돌렸습니다. 칸마다 그 설정에서 그 VTA 줄들 가운데 가장 좋은 줄 대비 CV-GEMV의 우위입니다(가장 좋은 줄은 바뀔 수 있고 JSON에 적혀 있습니다).
| 공정, 지표 | 공개 표 | 코어 이용률 40% | 50% | 배치 밀도 여유 0.15 | 0.25 | 가장 작은 값(규칙의 다섯) |
|---|---|---|---|---|---|---|
| Nangate45 M1 | +29.9% | +30.1% | +30.7% | +30.0% | +29.9% | +29.9% |
| Nangate45 M2 | -24.3% | -24.6% | -24.5% | -23.9% | -24.2% | -23.9% |
| ASAP7 M1 | +18.4% | +19.7% | +18.4%(= 공개 표) | +18.4% | +18.5% | +18.4% |
| ASAP7 M2 | -16.2% | -17.1% | -16.2%(= 공개 표) | -16.0% | -16.2% | -16.0% |
| SKY130HD M1 | +19.4% | +19.4% | +17.3% | +18.8% | +19.6% | +17.3% |
| SKY130HD M2 | -23.0% | -23.0% | -20.2% | -22.3% | -23.5% | -20.2% |
| GF180MCU M1 | +42.3% | +44.9% | +41.2% | +45.0% | +41.8% | +41.2% |
| GF180MCU M2 | -3.6% | -3.8% | -3.2% | -2.9% | -2.9% | -2.9% |
| IHP SG13G2 M1 | +18.0% | +18.5% | +17.6% | +17.7% | +18.4% | +17.6% |
| IHP SG13G2 M2 | -29.4% | -29.5% | -29.4% | -29.2% | -29.6% | -29.2% |
어느 변형에서도 지표가 뒤집히지 않았습니다. 모든 공정·지표에서 우위가 ±1% 밖에 남습니다. 가장 가까운 곳은 GF180MCU M2 -2.9%(밀도 여유 0.15)입니다. 규칙의 네 변형 가운데 줄의 클록 충족 여부, 배선 DRC 수, 재생 결과를 바꾼 것은 없습니다. GF180MCU에서는 공개 표와 같이 모든 변형에서 CV-GEMV가 클록을 맞추지 못해, 처리량은 자기 최소 주기로 계산하고 타이밍 관문은 열려 있습니다. 이 시험은 판정을 바꾸지 않습니다.
정정(규칙 2026-11-07 18:00, 결과를 본 뒤): 규칙은 기준 이용률을 45%로 적었지만 ASAP7은 50%입니다. 그래서 ASAP7의 50% 칸은 공개한 설정 그대로이고(AWS 실행이 공개된 ASAP7 세 줄의 숫자 칸을 모두 똑같이 재현), 40%는 기준보다 10포인트 낮습니다. 결과를 본 뒤 고정 규칙 밖에서 ASAP7 세 줄을 45%와 55%로 더 돌렸습니다(아래 표, 가장 작은 값에는 넣지 않음). 뒤집힌 지표는 없습니다.
| 공정, 지표 | ASAP7 45%(추가) | ASAP7 55%(추가) |
|---|---|---|
| ASAP7 M1 | +18.8% | +18.2% |
| ASAP7 M2 | -16.4% | -15.9% |
ASAP7 55%에서 VTA 행렬-벡터 코어, 손 이식판 tuned + carry-save는 목표 1000 ps를 0.30 ps 차이로 맞추지 못해 자기 최소 주기로 계산합니다.
VTA 여섯 줄 전체(규칙 2026-11-07 18:48, 교차 검토 5차 뒤·이 실행 전에 적음): 규칙이 뺀 VTA 14줄을 같은 네 설정으로 돌렸고, 그중 ASAP7 네 줄은 45%와 55%로도 돌렸습니다. 아래 칸은 그 설정에서 VTA 여섯 줄 가운데 가장 좋은 줄 대비 CV-GEMV의 우위입니다. 위 규칙 결과와 따로 보고하며, 위 결과는 공개한 그대로입니다.
| 공정, 지표 | 공개 표 | 코어 이용률 40% | 50% | 배치 밀도 여유 0.15 | 0.25 | 가장 작은 값(다섯) |
|---|---|---|---|---|---|---|
| Nangate45 M1 | +29.9% | +30.1% | +30.7% | +30.0% | +29.9% | +29.9% |
| Nangate45 M2 | -24.3% | -24.6% | -24.5% | -23.9% | -24.2% | -23.9% |
| ASAP7 M1 | +18.4% | +19.7% | +18.4% | +18.4% | +18.5% | +18.4% |
| ASAP7 M2 | -16.2% | -17.1% | -16.2% | -16.0% | -16.2% | -16.0% |
| SKY130HD M1 | +19.4% | +19.4% | +17.3% | +18.8% | +19.6% | +17.3% |
| SKY130HD M2 | -23.0% | -23.0% | -20.2% | -22.3% | -23.5% | -20.2% |
| GF180MCU M1 | +42.3% | +44.9% | +41.2% | +45.0% | +41.8% | +41.2% |
| GF180MCU M2 | -3.6% | -3.8% | -3.2% | -2.9% | -2.9% | -2.9% |
| IHP SG13G2 M1 | +18.0% | +18.5% | +17.6% | +17.7% | +18.4% | +17.6% |
| IHP SG13G2 M2 | -29.4% | -29.5% | -29.4% | -29.2% | -29.6% | -29.2% |
VTA 여섯 줄 전체와 비교해도 뒤집히거나 ±1% 안으로 들어온 지표는 없습니다. 어느 변형에서도 빠진 줄이 VTA 최고가 되지 않아, 우위는 규칙 결과와 같습니다. ASAP7 45%·55%, 여섯 줄 전체 대비: M1 +18.8%, +18.2%; M2 -16.4%, -15.9%(뒤집히거나 ±1% 안인 곳 없음). 밀도 여유 0.25에서 ASAP7 vta8_official_tuned 줄은 목표 1000 ps를 14.62 ps 차이로 맞추지 못해 자기 최소 주기로 계산합니다(공개 표에서는 맞춤).
지금의 판정 대상(r14)
위 시험은 2026-11-07에 그날의 판정 대상(r11)으로 정한 것입니다. 두 판정이 r14로 옮겨 가면서(2026-11-08 규칙, 판마다 결과 전에 적음; 이 실행은 06:21에 정함), 공정마다 그 대상 줄을 같은 네 설정으로, ASAP7은 45%와 55%로도 AWS 인스턴스에서 돌렸습니다. 칸마다 그 설정에서 VTA 여섯 줄 가운데 가장 좋은 줄 대비 r14의 우위입니다(VTA 줄은 위에 공개한 변형 줄). 따로 보고하며, 이 결과에 기대는 판정은 없습니다.
| 공정, 지표 | 공개 표 | 코어 이용률 40% | 50% | 배치 밀도 여유 0.15 | 0.25 | 가장 작은 값(다섯) |
|---|---|---|---|---|---|---|
| Nangate45 M1 | +32.1% | +32.3% | +32.9% | +32.1% | +32.1% | +32.1% |
| Nangate45 M2 | -24.5% | -24.7% | -24.5% | -24.2% | -24.3% | -24.2% |
| ASAP7 M1 | +17.9% | +19.1% | +17.9% | +17.6% | +17.8% | +17.6% |
| ASAP7 M2 | -16.2% | -17.0% | -16.2% | -15.4% | -15.9% | -15.4% |
| SKY130HD M1 | +21.2% | +21.1% | +17.5% | +19.2% | +21.3% | +17.5% |
| SKY130HD M2 | -23.5% | -23.4% | -19.3% | -21.2% | -24.3% | -19.3% |
| GF180MCU M1 | +51.3% | +55.3% | +52.1% | +56.3% | +52.2% | +51.3% |
| GF180MCU M2 | -3.0% | -3.2% | -2.0% | -3.3% | -2.8% | -2.0% |
| IHP SG13G2 M1 | +18.8% | +19.6% | +18.8% | +18.9% | +19.2% | +18.8% |
| IHP SG13G2 M2 | -28.9% | -29.1% | -28.9% | -28.8% | -29.1% | -28.8% |
뒤집히거나 ±1% 안으로 들어온 지표는 없습니다. ASAP7 45%·55%: M1 +18.2%, +17.7%; M2 -16.1%, -16.0%(뒤집히거나 ±1% 안인 곳 없음). 설정마다 각 대상의 셋업 최악 여유입니다(관문 G3는 공개한 흐름으로 정하며, 이 표는 다른 설정이 그 값을 얼마나 움직이는지 보여 줍니다):
| 공정, 대상 | 공개 표 | 코어 이용률 40% | 50% | 배치 밀도 여유 0.15 | 0.25 |
|---|---|---|---|---|---|
| Nangate45, CV-GEMV r14, PAIR_REG = 0 | +2.018 ns | +2.024 ns | +2.036 ns | +2.019 ns | +2.028 ns |
| ASAP7, CV-GEMV r14, PAIR_REG = 1 | +0.194 ns | +0.221 ns | +0.194 ns | +0.214 ns | +0.186 ns |
| SKY130HD, CV-GEMV r14, PAIR_REG = 0 | +0.478 ns | +0.545 ns | +0.110 ns | +0.435 ns | +0.450 ns |
| GF180MCU, CV-GEMV r14, PAIR_REG = 1 | -0.016 ns(못 맞춤) | -0.011 ns(못 맞춤) | -0.018 ns(못 맞춤) | -0.039 ns(못 맞춤) | +0.014 ns |
| IHP SG13G2, CV-GEMV r14, PAIR_REG = 0 | +1.348 ns | +1.283 ns | +1.014 ns | +1.360 ns | +1.018 ns |
GF180MCU: r14는 공개 표, 이용률 40%, 이용률 50%, 밀도 여유 0.15에서 8.0 ns를 맞추지 못합니다. 표: 이용률 40%, 이용률 50%, 밀도 여유 0.15, 밀도 여유 0.25, ASAP7 45%, ASAP7 55%.
민감도 JSON ↓ · 변형별 표(줄마다 원자료 폴더): 이용률 40%, 이용률 50%, 밀도 여유 0.15, 밀도 여유 0.25, ASAP7 45%, ASAP7 55% · VTA 전체, 이용률 40% · VTA 전체, 이용률 50% · VTA 전체, 밀도 여유 0.15 · VTA 전체, 밀도 여유 0.25 · VTA 전체, ASAP7 45% · VTA 전체, ASAP7 55%
다른 층·모델
두 판정은 투영 하나를 씁니다. 이 파일들이 생기기 전인 2026-11-08 08:40에 적은 대로, 판정 대상(CV-GEMV r14, 공정마다 대상 규칙이 고른 설정)과 표의 모든 비교 줄을 다섯 공정 모두에서 투영 11개를 더 쟀습니다(SKY130HD의 CV-GEMV gate_proj·up_proj는 빌드가 라우팅되지 않아 빠짐, 관문 참조). 기준 층의 나머지 투영 여섯, 첫 층과 마지막 층의 down_proj, 최근 모델 셋의 가운데 층 down_proj입니다. 투영마다 데이터는 기준과 같은 과정(같은 보정, 미리 정한 토큰 위치 8개, 토큰별 INT8)으로 만들었고, 생성기는 먼저 기준 표의 입력 파일 15개(그중 14개는 해시 공개)를 바이트 단위로 똑같이 만들었습니다. VTA, TPU, OpenGeMM, Gemmini는 실행 중에 모양을 받으므로 공개된 라우팅 넷리스트를 그대로 재생했습니다. CV-GEMV와 W8A8 기준선은 빌드할 때 모양을 고정하므로, 새 모양마다 같은 RTL을 같은 흐름 설정으로 다시 빌드했습니다. CV-GEMV는 명령 하나에 최대 4096행을 받으므로 gate_proj와 up_proj는 2,432 × 896 빌드 하나에서 명령 두 번으로 돕니다. 두 명령 사이에 테스트벤치가 가중치·그룹 메모리를 시간 0으로 바꿉니다. 토큰 사이에 질의 메모리를 바꾸는 것과 같은 방식이며(저장소는 모든 엔진 밖에 있음), 두 명령의 사이클과 읽기는 모두 셉니다. 기준 표와 같이 TPU와 Gemmini는 토큰 하나, 나머지는 토큰 둘을 재생합니다. 판정은 바뀌지 않으며 따로 보고합니다.
기준 표와 투영 11개를 통틀어 가장 작은 우위(SKY130HD는 기준 표와 투영 9개), 그리고 층 12의 투영 일곱 개를 합친 곱셈-누산당 에너지:
| 공정 | M1, 면적당 처리량(높을수록 좋음) | M2, 곱셈-누산당 에너지(낮을수록 좋음) | M2, 층 12 전체 |
|---|---|---|---|
| Nangate45 | +27.4% (Qwen2.5-0.5B 층 12 gate_proj) | -22.9% (Qwen2.5-0.5B 층 12 gate_proj) | -24.8% (VTA 공식 생성 모듈) |
| ASAP7 | +13.4% (Qwen2.5-0.5B 층 12 o_proj) | -14.3% (Qwen2.5-0.5B 층 12 q_proj) | -15.1% (VTA 손 이식판 tuned + carry-save) |
| SKY130HD | +14.6% (Qwen2.5-0.5B 층 12 o_proj) | -20.5% (Qwen3.5-0.8B 층 12 down_proj) | – |
| GF180MCU | +46.4% (Qwen2.5-0.5B 층 12 gate_proj) | -2.6% (Qwen2.5-0.5B 층 12 gate_proj) | -3.0% (VTA 공식 모듈 tuned + carry-save) |
| IHP SG13G2 | +14.5% (Qwen2.5-0.5B 층 12 o_proj) | -26.2% (Qwen2.5-0.5B 층 23 down_proj) | -28.4% (VTA 손 이식판 tuned + carry-save) |
면적당 처리량(M1): 가장 좋은 비교 줄 대비 CV-GEMV 우위
| 투영 | 행 × 열 | Nangate45 | ASAP7 | SKY130HD | GF180MCU | IHP SG13G2 |
|---|---|---|---|---|---|---|
Qwen2.5-0.5B 층 12 down_proj (기준 표) | 896 × 4,864 | +32.1% | +17.9% | +21.2% | +51.3% | +18.8% |
Qwen2.5-0.5B 층 12 q_proj | 896 × 896 | +28.9% | +13.4% | +14.6% | +46.8% | +14.5% |
Qwen2.5-0.5B 층 12 k_proj | 128 × 896 | +27.8% | +14.6% | +16.6% | +48.4% | +18.5% |
Qwen2.5-0.5B 층 12 v_proj | 128 × 896 | +27.8% | +14.6% | +16.6% | +48.4% | +18.5% |
Qwen2.5-0.5B 층 12 o_proj | 896 × 896 | +28.9% | +13.4% | +14.6% | +46.8% | +14.5% |
Qwen2.5-0.5B 층 12 gate_proj | 4,864 × 896 | +27.4% | +14.0% | 라우팅 빌드 없음(G3) | +46.4% | +16.0% |
Qwen2.5-0.5B 층 12 up_proj | 4,864 × 896 | +27.4% | +14.0% | 라우팅 빌드 없음(G3) | +46.4% | +16.0% |
Qwen2.5-0.5B 층 0 down_proj | 896 × 4,864 | +32.1% | +17.9% | +21.2% | +51.3% | +18.8% |
Qwen2.5-0.5B 층 23 down_proj | 896 × 4,864 | +32.1% | +17.9% | +21.2% | +51.3% | +18.8% |
Qwen3.5-0.8B 층 12 down_proj | 1,024 × 3,584 | +33.7% | +20.7% | +20.7% | +54.1% | +21.4% |
Qwen3.5-2B 층 12 down_proj | 2,048 × 6,144 | +32.9% | +17.4% | +18.3% | +51.0% | +20.9% |
Gemma 4 E2B 층 17 down_proj | 1,536 × 12,288 | +32.8% | +20.6% | +20.4% | +53.8% | +19.4% |
이 우위가 ±1% 안에 들거나 뒤집힌 작업은 없습니다.
유효 곱셈-누산당 에너지(M2): 가장 좋은 비교 줄 대비 CV-GEMV 우위
| 투영 | 행 × 열 | Nangate45 | ASAP7 | SKY130HD | GF180MCU | IHP SG13G2 |
|---|---|---|---|---|---|---|
Qwen2.5-0.5B 층 12 down_proj (기준 표) | 896 × 4,864 | -24.5% | -16.2% | -23.5% | -3.0% | -28.9% |
Qwen2.5-0.5B 층 12 q_proj | 896 × 896 | -23.8% | -14.3% | -23.7% | -3.6% | -27.7% |
Qwen2.5-0.5B 층 12 k_proj | 128 × 896 | -23.4% | -14.8% | -24.1% | -3.1% | -29.7% |
Qwen2.5-0.5B 층 12 v_proj | 128 × 896 | -23.4% | -14.5% | -23.9% | -2.9% | -29.5% |
Qwen2.5-0.5B 층 12 o_proj | 896 × 896 | -24.9% | -15.3% | -21.3% | -3.3% | -28.9% |
Qwen2.5-0.5B 층 12 gate_proj | 4,864 × 896 | -22.9% | -14.4% | 라우팅 빌드 없음(G3) | -2.6% | -28.0% |
Qwen2.5-0.5B 층 12 up_proj | 4,864 × 896 | -23.2% | -14.7% | 라우팅 빌드 없음(G3) | -3.0% | -28.2% |
Qwen2.5-0.5B 층 0 down_proj | 896 × 4,864 | -23.7% | -15.9% | -23.4% | -4.1% | -26.7% |
Qwen2.5-0.5B 층 23 down_proj | 896 × 4,864 | -23.1% | -15.5% | -23.2% | -3.9% | -26.2% |
Qwen3.5-0.8B 층 12 down_proj | 1,024 × 3,584 | -24.3% | -16.8% | -20.5% | -4.2% | -29.3% |
Qwen3.5-2B 층 12 down_proj | 2,048 × 6,144 | -24.8% | -15.8% | -22.1% | -3.0% | -29.8% |
Gemma 4 E2B 층 17 down_proj | 1,536 × 12,288 | -23.3% | -15.2% | -21.6% | -4.9% | -26.4% |
이 우위가 ±1% 안에 들거나 뒤집힌 작업은 없습니다.
유효 곱셈-누산당 읽는 비트(M3): 모든 공정과 투영에서 -10.4%입니다. 이 값은 데이터가 아니라 형식과 타일 나누기로 정해집니다.
결과 전에 적은 예상: CV-GEMV r14는 8행 묶음마다 고정 9~10사이클을 쓰고 VTA의 매핑에는 이것이 없어, 896열 투영에서는(사이클의 1.5%가 아니라 7~8%) M1 우위가 몇 점 작아지고, 기준 표에서 가장 가까웠던 GF180MCU 에너지 우위는 ±1% 안에 들거나 뒤집힐 수 있다고 봤습니다. 굵은 글씨는 ±1% 안이거나 뒤집힌 칸입니다. 칸마다 가장 좋은 비교 줄은 JSON에 있습니다.
결과: 896열 투영에서 M1 우위는 Nangate45 +27.4~+28.9%(기준 +32.1%), ASAP7 +13.4~+14.6%(기준 +17.9%), SKY130HD +14.6~+16.6%(기준 +21.2%), GF180MCU +46.4~+48.4%(기준 +51.3%), IHP SG13G2 +14.5~+18.5%(기준 +18.8%)입니다. GF180MCU M2는 기준 표와 투영 11개에 걸쳐 -4.9%에서 -2.6% 사이이며, ±1% 안에 들거나 뒤집히지 않았습니다.
관문
- Nangate45: 재생 121회, 모든 출력 비트 일치. CV-GEMV: 새 빌드 6개 중 6개 라우팅, DRC 위반 0, 목표 클록 setup 충족. W8A8: 새 빌드 6개 중 6개 라우팅, DRC 위반 0, 목표 클록 setup 충족.
- ASAP7: 재생 121회, 모든 출력 비트 일치. CV-GEMV: 새 빌드 6개 중 6개 라우팅, DRC 위반 0, 목표 클록 setup 충족. W8A8: 새 빌드 6개 중 6개 라우팅, DRC 위반 0, 목표 클록 setup 충족.
- SKY130HD: 재생 119회, 모든 출력 비트 일치. CV-GEMV: 새 빌드 6개 중 5개 라우팅, DRC 위반 0, 목표 클록 setup 충족; 2432 × 896 빌드는 라우팅되지 않아(상세 라우팅이 위반 1건으로 끝남, 연결 안 된 넷 남음) gate_proj·up_proj에는 CV-GEMV 줄이 없습니다. W8A8: 새 빌드 6개 중 6개 라우팅, DRC 위반 0, 목표 클록 setup 충족.
- GF180MCU: 재생 121회, 모든 출력 비트 일치. CV-GEMV: 새 빌드 6개 중 6개 라우팅, DRC 위반 0, 목표 클록 setup 미달 0.008 ns (1536 × 12288), 0.009 ns (2048 × 6144), 0.028 ns (896 × 896), 0.068 ns (1024 × 3584)(각자의 최소 주기로 계산). W8A8: 새 빌드 6개 중 6개 라우팅, DRC 위반 0, 목표 클록 setup 미달 0.188 ns (896 × 896), 0.478 ns (1024 × 3584), 0.501 ns (4864 × 896), 0.541 ns (1536 × 12288), 0.654 ns (2048 × 6144), 1.056 ns (128 × 896)(각자의 최소 주기로 계산).
- IHP SG13G2: 재생 121회, 모든 출력 비트 일치. CV-GEMV: 새 빌드 6개 중 6개 라우팅, DRC 위반 0, 목표 클록 setup 충족. W8A8: 새 빌드 6개 중 6개 라우팅, DRC 위반 0, 목표 클록 setup 충족.
투영 11개의 재생 줄마다(603줄, 기준 55줄은 기준 표 그대로) 재생한 기계(AWS 인스턴스 311회, Azure 빌드 VM 292회)와 읽은 라우팅 넷리스트의 SHA-256을 적었습니다. 공개된 라우팅 줄마다 그 줄의 재생은 모두 같은 넷리스트 하나를 읽었고(55/55줄), second-machine.json이 해시를 공개한 22줄은 그 넷리스트입니다. 기준 투영에서 생성기 검사는 파일 15개를 비교해 다른 것이 0개였고, fixtures.json이 해시를 공개한 14개는 그 해시와 함께 적었습니다(같음). 라우팅되지 않은 빌드의 라우팅 기록: 발췌.
작업 확장 JSON ↓ · 줄마다 원자료는 /evidence/compare/workloads/ 아래에 있습니다.
네 배 크기: 사이클당 256 MAC
위의 모든 엔진은 사이클당 곱셈-누산 64개가 최대입니다. 새 크기의 원본·입력 파일·흐름·재생이 하나도 없던 2026-11-08 16:51에 적은 대로, 판정 대상(공정마다 대상 규칙이 고른 설정의 CV-GEMV r14, 이제 사이클당 32행)과 모든 비교 줄을 사이클당 256 MAC으로 다시 빌드해 다섯 공정의 기준 층에서 쟀습니다. W8A8 기준선은 32행, VTA는 16 × 16(기본 크기)으로 여섯 줄 모두, TPU는 16 × 16, Gemmini는 16 × 16 메시(기본값), OpenGeMM은 1 × 16 × 16입니다. 공정마다 흐름 설정은 같은 64 MAC 줄의 것이고 크기만 바꿨습니다. VTA의 정사각 모양은 기본값이며 32 × 8 모양보다 누산기가 절반이라 VTA에 유리합니다. 판정은 바뀌지 않으며 따로 보고합니다.
흐름 전에 규칙대로 확인한 것: 크기 8에서 일반화한 입력 생성기가 기준 파일 15개를 바이트 단위로 똑같이 만들었고, 일반화한 테스트벤치가 64 MAC 줄 12개 중 12개의 공개 재생 결과 줄을 그대로 냈습니다. 256 MAC에서는 12줄 중 12줄이 RTL에서 비트 단위로 일치했습니다. 16 × 16 VTA 손 이식판은 VTA 원본을 따릅니다. 원본은 점곱의 파이프라인 레지스터를 첫 가산 층(8 × 8)에서 세 번째 층(16 × 16, 가산 두 층 뒤)으로 옮깁니다. 손 이식판은 손대지 않은 Chisel에서 생성한 모듈과, tuned·carry-save 사본은 손대지 않은 모듈과 매 사이클 맞대어 확인했습니다(20만 사이클 25회, 불일치 0, 일부러 틀린 사본은 걸림). 생성 모듈의 tuned·carry-save 사본을 만드는 프로그램은 공개된 8 × 8 사본을 바이트 단위로 똑같이 만듭니다.
256 MAC 비교 줄 중 가장 좋은 줄 대비 CV-GEMV 우위
| 공정 | M1, 면적당 처리량 | 64 MAC의 M1 | M2, 곱셈-누산당 에너지 | 64 MAC의 M2 |
|---|---|---|---|---|
| Nangate45 | +12.3% (VTA 공식 생성 모듈, 16 × 16) | +32.1% | +4.1% (VTA 공식 생성 모듈, 16 × 16) | -24.5% |
| ASAP7 | -7.9% (VTA 공식 생성 모듈, 16 × 16) | +17.9% | +26.0% (VTA 공식 생성 모듈, 16 × 16) | -16.2% |
| SKY130HD | +0.9% (VTA 공식 모듈 tuned + carry-save, 16 × 16) | +21.2% | +12.9% (VTA 공식 모듈 tuned + carry-save, 16 × 16) | -23.5% |
| GF180MCU | +32.2% (VTA 공식 생성 모듈, 16 × 16) | +51.3% | +25.7% (VTA 공식 생성 모듈, 16 × 16) | -3.0% |
| IHP SG13G2 | +5.6% (VTA 손 이식판 tuned + carry-save, 16 × 16) | +18.8% | -1.8% (VTA 공식 모듈 tuned + carry-save, 16 × 16) | -28.9% |
64 MAC 열은 공개된 줄로 한 같은 비교입니다(M1은 높을수록, M2는 낮을수록 좋음, 굵은 글씨는 ±1% 안이거나 뒤집힌 칸). 유효 곱셈-누산당 읽는 비트(M3): 모든 공정에서 -15.9%입니다.
결과 전에 적은 예상: 토큰당 사이클은 매핑에서 정해지므로(CV-GEMV 약 17,275 또는 17,303, VTA 17,025) VTA 대비 사이클 비율은 기준 표와 같고, VTA와 OpenGeMM은 곱셈기가 네 배가 될 때 누산기는 두 배만 되는 반면 CV-GEMV의 행별 부분은 네 배가 되므로, VTA 대비 우위가 64 MAC보다 작아지거나 뒤집힐 수 있다고 봤습니다. 결과: ±1% 안이거나 뒤집힌 곳: Nangate45 M2 +4.1%(VTA 공식 생성 모듈, 16 × 16), ASAP7 M1 -7.9%(VTA 공식 생성 모듈, 16 × 16), ASAP7 M2 +26.0%(VTA 공식 생성 모듈, 16 × 16), SKY130HD M1 +0.9%(VTA 공식 모듈 tuned + carry-save, 16 × 16), SKY130HD M2 +12.9%(VTA 공식 모듈 tuned + carry-save, 16 × 16), GF180MCU M2 +25.7%(VTA 공식 생성 모듈, 16 × 16)
참고로만 보고(결과 전에 정함): 흐름은 타이밍 수리 버퍼를 넣으며, 대부분은 엔진 입력을 바로 받는 레지스터의 홀드 버퍼입니다(CV-GEMV / VTA 줄 중 가장 많은 수: Nangate45 5546 / 15382, ASAP7 9600 / 9110, SKY130HD 10351 / 7488, GF180MCU 7618 / 13745, IHP SG13G2 10029 / 15146). 모든 줄에서 이 버퍼 면적을 빼면 M1 우위는 Nangate45 +10.2%(64 MAC: +26.2%), ASAP7 -5.9%(64 MAC: +7.0%), SKY130HD +6.6%(64 MAC: +21.0%), GF180MCU +24.4%(64 MAC: +48.8%), IHP SG13G2 +0.3%(64 MAC: +17.3%)입니다.
홀드 수리 버퍼 상한에서 흐름이 멈춰 홀드 수리를 끄고 다시 빌드한 줄(두 번째 재시도, 그 줄에 유리함): ASAP7 VTA 손 이식판, 16 × 16, ASAP7 VTA 손 이식판 tuned + carry-save, 16 × 16, ASAP7 VTA 공식 생성 모듈, 16 × 16, ASAP7 VTA 공식 모듈 tuned + carry-save, 16 × 16, ASAP7 VTA 공식 모듈 tuned, 16 × 16, ASAP7 VTA 손 이식판 tuned, 16 × 16, Nangate45 VTA 공식 생성 모듈, 16 × 16.
엔진마다 256 MAC 값 ÷ 같은 엔진의 64 MAC 값
| 공정 | CV-GEMV 면적 | CV-GEMV M1 | CV-GEMV M2 | VTA 가장 좋은 줄(M1): 면적 | 그 줄의 M1 | VTA 가장 좋은 줄(M2): M2 |
|---|---|---|---|---|---|---|
| Nangate45 | 3.87 | 1.03 | 1.01 | 3.09 | 1.29 | 0.71 |
| ASAP7 | 3.95 | 1.01 | 1.03 | 2.90 | 1.51 | 0.64 |
| SKY130HD | 4.17 | 0.96 | 1.15 | 3.47 | 1.15 | 0.78 |
| GF180MCU | 3.90 | 0.98 | 1.00 | 3.23 | 1.39 | 0.72 |
| IHP SG13G2 | 3.79 | 1.05 | 1.00 | 3.37 | 1.19 | 0.72 |
관문
- Nangate45: 11줄 재생, 모든 출력 비트 일치; 모든 줄이 목표 클록 충족; 라우팅 DRC 위반 0.
- ASAP7: 11줄 재생, 모든 출력 비트 일치; 목표 클록 setup 미달 VTA 손 이식판 tuned + carry-save, 16 × 16 11.100 ps, VTA 공식 모듈 tuned, 16 × 16 17.300 ps, VTA 공식 모듈 tuned + carry-save, 16 × 16 18.600 ps, LogikBench TPU MXU 16 × 16 58.900 ps, VTA 손 이식판, 16 × 16 111.600 ps, VTA 손 이식판 tuned, 16 × 16 173.600 ps, OpenGeMM BlockGemm 1 × 16 × 16 1128.700 ps(각자의 최소 주기로 계산); 라우팅 DRC 위반 0.
- SKY130HD: 11줄 재생, 모든 출력 비트 일치; 목표 클록 setup 미달 VTA 손 이식판 tuned + carry-save, 16 × 16 0.003 ns, VTA 공식 생성 모듈, 16 × 16 0.040 ns, VTA 손 이식판 tuned, 16 × 16 0.126 ns, VTA 공식 모듈 tuned, 16 × 16 0.138 ns, VTA 손 이식판, 16 × 16 0.152 ns, OpenGeMM BlockGemm 1 × 16 × 16 6.538 ns(각자의 최소 주기로 계산); 라우팅 DRC 위반 0.
- GF180MCU: 11줄 재생, 모든 출력 비트 일치; 목표 클록 setup 미달 CV-GEMV r14, PAIR_REG = 1, P = 32 0.410 ns, 기본 W8A8 GEMV (기준선), P = 32 0.943 ns, Gemmini 메시 16 × 16, 가중치 고정 1.379 ns, VTA 공식 생성 모듈, 16 × 16 3.221 ns, VTA 공식 모듈 tuned + carry-save, 16 × 16 3.310 ns, VTA 공식 모듈 tuned, 16 × 16 3.326 ns, VTA 손 이식판 tuned + carry-save, 16 × 16 3.331 ns, LogikBench TPU MXU 16 × 16 3.382 ns, VTA 손 이식판 tuned, 16 × 16 4.446 ns, VTA 손 이식판, 16 × 16 5.256 ns, OpenGeMM BlockGemm 1 × 16 × 16 17.732 ns(각자의 최소 주기로 계산); 라우팅 DRC 위반 0.
- IHP SG13G2: 11줄 재생, 모든 출력 비트 일치; 목표 클록 setup 미달 OpenGeMM BlockGemm 1 × 16 × 16 1.476 ns(각자의 최소 주기로 계산); 라우팅 DRC 위반 0.
기계: AWS 인스턴스 23줄, Azure 빌드 VM 32줄. 줄마다 기계와 라우팅 넷리스트의 SHA-256을 적었습니다.
재현
2026-11-08 17:49에 적은 대로 256 MAC의 모든 줄을 AWS 인스턴스(같은 이미지·설정의 두 대)의 깨끗한 폴더에서 한 번 더 빌드하고 재생했습니다(Azure 줄은 두 번째 기계에서, AWS 줄은 같은 종류 기계에서 깨끗하게 다시). 줄마다 라우팅 넷리스트의 SHA-256, 셀 면적, setup 여유, 라우팅 DRC, 재생의 사이클과 결과 줄, 전력을 비교했습니다. 55줄 중 55줄은 모든 항목이 같습니다. 위의 우위는 첫 실행 값이고, 줄마다 두 번째 실행 값은 size256.json(reproduction, rows)에 있습니다.
256 MAC JSON ↓ · 줄마다 원자료는 /evidence/compare/size256/ 아래에 있습니다.
256 MAC에서 다른 층과 모델
2026-11-08 17:49에 적은 대로, 작업 확장 절의 투영 11개를 같은 정수로 256 MAC 대상과 모든 256 MAC 비교 줄에 돌렸습니다. VTA, TPU, OpenGeMM, Gemmini는 256 MAC 라우팅 넷리스트를 재생하고, CV-GEMV와 W8A8 기준선은 새 모양마다 모양만 바꿔 빌드했습니다. 기준 층과 투영 전체에서 가장 작은 우위(CV-GEMV에 가장 불리한 칸)를 64 MAC의 같은 값과 나란히 적습니다(M1은 높을수록, M2는 낮을수록 좋음).
| 공정 | 가장 작은 M1 우위 | 64 MAC | 가장 작은 M2 우위 | 64 MAC | 12층 전체 M2 | 64 MAC |
|---|---|---|---|---|---|---|
| Nangate45 | +8.5% (gate_proj) | +27.4% (gate_proj) | +11.5% (층 23 down_proj) | -22.9% (gate_proj) | +6.5% | -24.8% |
| ASAP7 | -12.0% (o_proj) | +13.4% (o_proj) | +33.5% (q_proj) | -14.3% (q_proj) | +30.4% | -15.1% |
| SKY130HD | -1.5% (o_proj) | +14.6% (o_proj), 11개 중 9개 | +13.1% (층 23 down_proj) | -20.5% (Qwen3.5-0.8B down_proj), 11개 중 9개 | +11.1% | – |
| GF180MCU | +30.6% (gate_proj) | +46.4% (gate_proj) | +34.5% (gate_proj) | -2.6% (gate_proj) | +31.0% | -3.0% |
| IHP SG13G2 | +1.5% (gate_proj) | +14.5% (o_proj) | -0.8% (gate_proj) | -26.2% (층 23 down_proj) | -1.3% | -28.4% |
재생 605건, 모든 출력 비트 일치. ±1% 안이거나 뒤집힌 곳: Nangate45 down_proj(기준) M2 +4.1%(VTA 공식 생성 모듈, 16 × 16), Nangate45 q_proj M2 +7.8%(VTA 공식 생성 모듈, 16 × 16), Nangate45 k_proj M2 +7.9%(VTA 공식 생성 모듈, 16 × 16), Nangate45 v_proj M2 +8.3%(VTA 공식 생성 모듈, 16 × 16), Nangate45 o_proj M2 +1.6%(VTA 공식 생성 모듈, 16 × 16), Nangate45 gate_proj M2 +8.4%(VTA 공식 생성 모듈, 16 × 16), Nangate45 up_proj M2 +8.2%(VTA 공식 생성 모듈, 16 × 16), Nangate45 층 0 down_proj M2 +10.5%(VTA 공식 생성 모듈, 16 × 16), Nangate45 층 23 down_proj M2 +11.5%(VTA 공식 생성 모듈, 16 × 16), Nangate45 Qwen3.5-0.8B down_proj M2 +3.8%(VTA 공식 생성 모듈, 16 × 16), Nangate45 Qwen3.5-2B down_proj M2 +3.4%(VTA 공식 생성 모듈, 16 × 16), Nangate45 Gemma 4 E2B down_proj M2 +8.2%(VTA 공식 생성 모듈, 16 × 16), ASAP7 down_proj(기준) M1 -7.9%(VTA 공식 생성 모듈, 16 × 16), ASAP7 down_proj(기준) M2 +26.0%(VTA 공식 생성 모듈, 16 × 16), ASAP7 q_proj M1 -12.0%(VTA 공식 생성 모듈, 16 × 16), ASAP7 q_proj M2 +33.5%(VTA 공식 생성 모듈, 16 × 16), ASAP7 k_proj M1 -11.3%(VTA 공식 생성 모듈, 16 × 16), ASAP7 k_proj M2 +32.6%(VTA 공식 생성 모듈, 16 × 16), ASAP7 v_proj M1 -11.3%(VTA 공식 생성 모듈, 16 × 16), ASAP7 v_proj M2 +33.2%(VTA 손 이식판, 16 × 16), ASAP7 o_proj M1 -12.0%(VTA 공식 생성 모듈, 16 × 16), ASAP7 o_proj M2 +26.9%(VTA 공식 모듈 tuned + carry-save, 16 × 16), ASAP7 gate_proj M1 -11.9%(VTA 공식 생성 모듈, 16 × 16), ASAP7 gate_proj M2 +33.1%(VTA 공식 생성 모듈, 16 × 16), ASAP7 up_proj M1 -11.9%(VTA 공식 생성 모듈, 16 × 16), ASAP7 up_proj M2 +32.9%(VTA 공식 생성 모듈, 16 × 16), ASAP7 층 0 down_proj M1 -7.9%(VTA 공식 생성 모듈, 16 × 16), ASAP7 층 0 down_proj M2 +29.9%(VTA 공식 생성 모듈, 16 × 16), ASAP7 층 23 down_proj M1 -7.9%(VTA 공식 생성 모듈, 16 × 16), ASAP7 층 23 down_proj M2 +30.8%(VTA 공식 생성 모듈, 16 × 16), ASAP7 Qwen3.5-0.8B down_proj M1 -6.9%(VTA 공식 생성 모듈, 16 × 16), ASAP7 Qwen3.5-0.8B down_proj M2 +25.6%(VTA 공식 생성 모듈, 16 × 16), ASAP7 Qwen3.5-2B down_proj M1 -7.4%(VTA 공식 생성 모듈, 16 × 16), ASAP7 Qwen3.5-2B down_proj M2 +26.4%(VTA 공식 생성 모듈, 16 × 16), ASAP7 Gemma 4 E2B down_proj M1 -6.9%(VTA 공식 생성 모듈, 16 × 16), ASAP7 Gemma 4 E2B down_proj M2 +29.7%(VTA 공식 생성 모듈, 16 × 16), SKY130HD down_proj(기준) M1 +0.9%(VTA 공식 모듈 tuned + carry-save, 16 × 16), SKY130HD down_proj(기준) M2 +12.9%(VTA 공식 모듈 tuned + carry-save, 16 × 16), SKY130HD q_proj M1 -1.5%(VTA 공식 모듈 tuned + carry-save, 16 × 16), SKY130HD q_proj M2 +10.1%(VTA 공식 모듈 tuned + carry-save, 16 × 16), SKY130HD k_proj M2 +7.0%(VTA 공식 모듈 tuned + carry-save, 16 × 16), SKY130HD v_proj M2 +7.5%(VTA 공식 모듈 tuned + carry-save, 16 × 16), SKY130HD o_proj M1 -1.5%(VTA 공식 모듈 tuned + carry-save, 16 × 16), SKY130HD o_proj M2 +12.5%(VTA 공식 모듈 tuned + carry-save, 16 × 16), SKY130HD gate_proj M1 -1.1%(VTA 공식 모듈 tuned + carry-save, 16 × 16), SKY130HD gate_proj M2 +10.2%(VTA 공식 모듈 tuned + carry-save, 16 × 16), SKY130HD up_proj M1 -1.1%(VTA 공식 모듈 tuned + carry-save, 16 × 16), SKY130HD up_proj M2 +10.1%(VTA 공식 모듈 tuned + carry-save, 16 × 16), SKY130HD 층 0 down_proj M1 +0.9%(VTA 공식 모듈 tuned + carry-save, 16 × 16), SKY130HD 층 0 down_proj M2 +12.7%(VTA 공식 모듈 tuned + carry-save, 16 × 16), SKY130HD 층 23 down_proj M1 +0.9%(VTA 공식 모듈 tuned + carry-save, 16 × 16), SKY130HD 층 23 down_proj M2 +13.1%(VTA 공식 생성 모듈, 16 × 16), SKY130HD Qwen3.5-0.8B down_proj M2 +9.7%(VTA 공식 모듈 tuned + carry-save, 16 × 16), SKY130HD Qwen3.5-2B down_proj M2 +9.0%(VTA 공식 모듈 tuned + carry-save, 16 × 16), SKY130HD Gemma 4 E2B down_proj M2 +12.7%(VTA 공식 모듈 tuned + carry-save, 16 × 16), GF180MCU down_proj(기준) M2 +25.7%(VTA 공식 생성 모듈, 16 × 16), GF180MCU q_proj M2 +33.9%(VTA 공식 생성 모듈, 16 × 16), GF180MCU k_proj M2 +33.4%(VTA 공식 생성 모듈, 16 × 16), GF180MCU v_proj M2 +34.1%(VTA 공식 생성 모듈, 16 × 16), GF180MCU o_proj M2 +26.1%(VTA 공식 생성 모듈, 16 × 16), GF180MCU gate_proj M2 +34.5%(VTA 공식 생성 모듈, 16 × 16), GF180MCU up_proj M2 +34.3%(VTA 공식 생성 모듈, 16 × 16), GF180MCU 층 0 down_proj M2 +30.5%(VTA 공식 생성 모듈, 16 × 16), GF180MCU 층 23 down_proj M2 +31.3%(VTA 공식 생성 모듈, 16 × 16), GF180MCU Qwen3.5-0.8B down_proj M2 +25.2%(VTA 공식 생성 모듈, 16 × 16), GF180MCU Qwen3.5-2B down_proj M2 +27.0%(VTA 공식 생성 모듈, 16 × 16), GF180MCU Gemma 4 E2B down_proj M2 +31.5%(VTA 공식 생성 모듈, 16 × 16), IHP SG13G2 gate_proj M2 -0.8%(VTA 손 이식판 tuned + carry-save, 16 × 16), IHP SG13G2 up_proj M2 -1.0%(VTA 손 이식판 tuned + carry-save, 16 × 16). 목표 클록을 맞추지 못해 자기 최소 주기로 계산한 새 빌드: GF180MCU CV-GEMV r14, PAIR_REG = 1, P = 32 1,024 × 3,584 0.160 ns 미달, GF180MCU CV-GEMV r14, PAIR_REG = 1, P = 32 128 × 896 0.166 ns 미달, GF180MCU CV-GEMV r14, PAIR_REG = 1, P = 32 1,536 × 12,288 0.152 ns 미달, GF180MCU CV-GEMV r14, PAIR_REG = 1, P = 32 2,048 × 6,144 0.339 ns 미달, GF180MCU CV-GEMV r14, PAIR_REG = 1, P = 32 2,432 × 896 0.252 ns 미달, GF180MCU CV-GEMV r14, PAIR_REG = 1, P = 32 896 × 896 0.115 ns 미달, GF180MCU 기본 W8A8 GEMV (기준선), P = 32 1,024 × 3,584 0.872 ns 미달, GF180MCU 기본 W8A8 GEMV (기준선), P = 32 128 × 896 0.966 ns 미달, GF180MCU 기본 W8A8 GEMV (기준선), P = 32 1,536 × 12,288 0.767 ns 미달, GF180MCU 기본 W8A8 GEMV (기준선), P = 32 2,048 × 6,144 0.631 ns 미달, GF180MCU 기본 W8A8 GEMV (기준선), P = 32 4,864 × 896 1.086 ns 미달, GF180MCU 기본 W8A8 GEMV (기준선), P = 32 896 × 896 0.806 ns 미달, IHP SG13G2 기본 W8A8 GEMV (기준선), P = 32 1,536 × 12,288 0.007 ns 미달, SKY130HD CV-GEMV r14, PAIR_REG = 0, P = 32 896 × 896 0.030 ns 미달. 새 빌드의 라우팅 DRC는 모두 0입니다. 결과 전에 적은 예상: CV-GEMV의 행 블록당 고정 사이클은 P와 무관하므로, 896열 투영에서는 M1 우위가 기준 층보다 몇 포인트 작을 것으로 봤습니다(64 MAC과 같음). 결과: 가장 작은 M1 우위는 모든 공정에서 기준 층보다 1.6~4.1포인트 작습니다.
256 MAC 작업 JSON ↓ · 원자료는 /evidence/compare/workloads256/ 아래에 있습니다.
메모리가 쉬지 않게 하는 배열 크기
참고로만 보고합니다(256 MAC 지표가 하나도 없던 2026-11-08 18:18에 정한 규칙). 토큰 하나씩 생성할 때는 토큰마다 모든 가중치를 한 번 읽으므로, 최대 대역폭 BW인 메모리가 먹일 수 있는 유효 곱셈-누산은 초당 8 × BW / M3개입니다. M3는 256 MAC CV-GEMV가 기준 층에서 잰 유효 곱셈-누산당 읽는 비트입니다(4.625). 이를 256 MAC 줄의 클록과 이용률로 나누면 따라갈 수 있는 사이클당 곱셈-누산 수가 되고, 표는 그보다 작지 않은 64~4,096 사이의 2의 거듭제곱 중 가장 작은 값입니다. 최대 대역폭은 JEDEC 표준값(전송 속도 × 버스 폭 / 8)이며, 실제 컨트롤러는 이보다 덜 내므로 모든 크기는 상한입니다. *는 잰 크기가 아닙니다(256 MAC 줄의 클록·이용률·M3로 계산, 크기가 다르면 이 값들도 달라짐).
| 메모리 | 최대 GB/s | Nangate45 | ASAP7 | SKY130HD | GF180MCU | IHP SG13G2 | Qwen2.5-0.5B 초당 토큰, 상한 |
|---|---|---|---|---|---|---|---|
| LPDDR4X-4266 x32 | 17.1 | 128* | 64 | 256 | 256 | 256 | 60 |
| LPDDR5-6400 x32 | 25.6 | 256 | 64 | 512* | 512* | 512* | 90 |
| LPDDR5X-8533 x16 | 17.1 | 128* | 64 | 256 | 256 | 256 | 60 |
| LPDDR5X-8533 x32 | 34.1 | 256 | 64 | 512* | 512* | 512* | 120 |
| LPDDR5X-8533 x64 | 68.3 | 512* | 128* | 1,024* | 1,024* | 1,024* | 239 |
| LPDDR5X-8533 x128 | 136.5 | 1,024* | 256 | 2,048* | 2,048* | 2,048* | 478 |
| LPDDR5X-8533 x256 | 273.1 | 2,048* | 512* | 4,096* | 4,096* | 4,096* | 956 |
| HBM3-6400 x1024 (one stack) | 819.2 | > 4,096 | 2,048* | > 4,096 | > 4,096 | > 4,096 | 2,869 |
토큰 속도는 24층 각각의 투영 7개와 151,936 × 896 출력 투영만 셉니다(토큰당 곱셈-누산 493,961,216개). 잰 줄이 자기 클록에서 읽는 대역폭(GB/s):
| 공정 | 클록, MHz | CV-GEMV 64 MAC | CV-GEMV 256 MAC | W8A8 기준선 256 MAC |
|---|---|---|---|---|
| Nangate45 | 250 | 10.6 | 36.5 | 65.5 |
| ASAP7 | 1000 | 42.3 | 145.6 | 261.8 |
| SKY130HD | 125 | 5.3 | 18.2 | 32.7 |
| GF180MCU | 119 | 5.3 | 17.3 | 29.3 |
| IHP SG13G2 | 125 | 5.3 | 18.2 | 32.7 |
결과 전에 적은 예상: LPDDR5X-8533 x64에서는 모든 공정에서 128 또는 256이 나올 것으로 봤습니다. 결과: Nangate45 512, ASAP7 128, SKY130HD 1024, GF180MCU 1024, IHP SG13G2 1024로, Nangate45, SKY130HD, GF180MCU, IHP SG13G2에서는 예상이 맞지 않았습니다.
256 MAC의 다른 모양: 16행 × 16열
위의 256 MAC 줄은 CV-GEMV r14를 사이클당 32행 × 8열로 빌드한 것입니다. 아래 줄의 흐름·재생·전력이 하나도 없던 2026-11-10 11:20에 적은 대로, 뒤 리비전 r15를 사이클당 16행 × 16열로 빌드했습니다. 사이클당 256 MAC, 같은 정수, 같은 두 토큰, 같은 출력입니다. 공정마다 흐름 설정과 목표 클록은 그 공정의 256 MAC r14 줄의 것이고, 원본 파일·매개변수·이름만 바꿨습니다. 공정마다 빌드 세 개는 점곱의 파이프라인 레지스터만 다릅니다(PAIR_REG = 0, 2, 1. 플립플롭이 적은 순서). 모양과 PAIR_REG = 2 설정은 위 256 MAC 결과를 본 뒤, r15 줄의 흐름이 하나도 없을 때 RTL 재생과 합성 면적으로 정했습니다. 다른 모양 하나(8행 × 32열)는 합성으로만 살펴보고 재지 않았습니다. 비교 줄은 위에 공개한 256 MAC 줄이며 다시 빌드하지 않았습니다. 판정은 바뀌지 않습니다. 판정 대상은 그대로 r14이고, r15의 RTL은 r14와 마찬가지로 공개하지 않습니다.
흐름 전에 확인한 것: r15 원본을 r14의 모양으로 빌드하면 공개된 줄 3개 중 3개(64 MAC과 256 MAC)의 재생 결과 줄이 그대로 나옵니다. 16 × 16에서는 빌드 3개 중 3개가 RTL에서 비트 단위로 일치했고, 기대 출력 파일은 공개된 256 MAC 줄의 파일과 바이트 단위로 같습니다.
공정마다 보고하는 줄
전력이나 지표를 읽기 전에 타이밍만 보고 골랐습니다. 아래 순서의 세 빌드 가운데 목표 클록을 맞추고 라우팅 DRC 위반이 0인 첫 빌드이고, 그런 빌드가 없으면 최소 주기가 가장 짧은 빌드입니다. 목표 클록에서의 setup 여유(굵은 글씨가 고른 빌드):
| 공정 | PAIR_REG = 0 | PAIR_REG = 2 | PAIR_REG = 1 | 보고하는 줄 |
|---|---|---|---|---|
| Nangate45 | +1.928 ns | +2.292 ns | +2.358 ns | PAIR_REG = 0 |
| ASAP7 | -108 ps | +57 ps | +147 ps | PAIR_REG = 2 |
| SKY130HD | -0.231 ns | +0.674 ns | +1.621 ns | PAIR_REG = 2 |
| GF180MCU | -5.935 ns | -2.746 ns | -0.992 ns | PAIR_REG = 1(목표를 맞춘 빌드 없음: 최소 주기가 가장 짧은 빌드) |
| IHP SG13G2 | +0.739 ns | +1.791 ns | +1.949 ns | PAIR_REG = 0 |
256 MAC 비교 줄 중 가장 좋은 줄 대비 우위
| 공정 | M1, 면적당 처리량 | r14의 M1 우위 | M2, 곱셈-누산당 에너지 | r14의 M2 우위 |
|---|---|---|---|---|
| Nangate45 | +26.9% (VTA 공식 생성 모듈, 16 × 16) | +12.3% | -4.2% (VTA 공식 생성 모듈, 16 × 16) | +4.1% |
| ASAP7 | +9.4% (VTA 공식 생성 모듈, 16 × 16) | -7.9% | +4.3% (VTA 공식 생성 모듈, 16 × 16) | +26.0% |
| SKY130HD | +18.1% (VTA 공식 모듈 tuned + carry-save, 16 × 16) | +0.9% | -2.6% (VTA 공식 모듈 tuned + carry-save, 16 × 16) | +12.9% |
| GF180MCU | +36.1% (VTA 공식 생성 모듈, 16 × 16) | +32.2% | +21.3% (VTA 공식 생성 모듈, 16 × 16) | +25.7% |
| IHP SG13G2 | +15.4% (VTA 손 이식판 tuned + carry-save, 16 × 16) | +5.6% | -13.0% (VTA 공식 모듈 tuned + carry-save, 16 × 16) | -1.8% |
r14 열은 위 256 MAC 표의 우위이며 비교 줄이 같습니다(M1은 높을수록, M2는 낮을수록 좋음, 굵은 글씨는 ±1% 안이거나 뒤집힌 칸). 유효 곱셈-누산당 읽는 비트(M3): 4.875, 모든 공정에서 -11.4%입니다(r14는 4.625, -15.9%). 사이클당 행이 32개에서 16개로 줄어 활성값 하나를 두 배 자주 읽습니다.
같은 공정에서 16 × 16 r15 ÷ 32 × 8 r14
| 공정 | r15 빌드 | r14 줄의 설정 | 셀 면적 | 토큰당 사이클 | M1 | M2 |
|---|---|---|---|---|---|---|
| Nangate45 | PAIR_REG = 0 | PAIR_REG = 0 | 0.878 | 1.008 | 1.130 | 0.920 |
| ASAP7 | PAIR_REG = 2 | PAIR_REG = 1 | 0.835 | 1.010 | 1.187 | 0.828 |
| SKY130HD | PAIR_REG = 2 | PAIR_REG = 0 | 0.845 | 1.011 | 1.170 | 0.863 |
| GF180MCU | PAIR_REG = 1 | PAIR_REG = 1 | 0.900 | 1.010 | 1.029 | 0.966 |
| IHP SG13G2 | PAIR_REG = 0 | PAIR_REG = 0 | 0.908 | 1.008 | 1.093 | 0.886 |
결과 전에 적은 예상: 합성 면적과 사이클 수로 보면 M1은 PAIR_REG = 0을 고른 곳에서 약 10%, r14의 PAIR_REG = 1 대신 PAIR_REG = 2를 고른 곳에서 약 18% 오르고, 곱셈-누산당 에너지는 PAIR_REG = 2를 고른 곳에서 가장 많이 줄 것으로 봤습니다. r14에서 뒤집힌 우위가 돌아설지는 알 수 없다고 적었습니다. 결과: r14 대비 M1 Nangate45 +13.0%, ASAP7 +18.7%, SKY130HD +17.0%, GF180MCU +2.9%, IHP SG13G2 +9.3%. r14 대비 곱셈-누산당 에너지 Nangate45 -8.0%, ASAP7 -17.2%, SKY130HD -13.7%, GF180MCU -3.4%, IHP SG13G2 -11.4%. r14에서는 ±1% 안이거나 뒤집혔고 r15에서는 아닌 곳: Nangate45 M2, ASAP7 M1, SKY130HD M1, SKY130HD M2. 여전히 ±1% 안이거나 뒤집힌 곳: ASAP7 M2 +4.3%(VTA 공식 생성 모듈, 16 × 16), GF180MCU M2 +21.3%(VTA 공식 생성 모듈, 16 × 16).
세 빌드 전부
| 공정 | 빌드 | setup 여유 | 최소 주기 | 라우팅 DRC | 셀 면적 (µm²) | 토큰당 사이클 | M1 GMAC/s/mm² ↑ | M2 유효 MAC당 pJ ↓ | 재생 |
|---|---|---|---|---|---|---|---|---|---|
| Nangate45 | PAIR_REG = 0 | +1.928 ns | 2.070 ns | 0 | 85,312.9 | 17,416 | 733.3 | 0.648 | PASS, 선택 |
| Nangate45 | PAIR_REG = 2 | +2.292 ns | 1.710 ns | 0 | 90,002.4 | 17,472 | 692.9 | 0.688 | PASS, 선택 안 함 |
| Nangate45 | PAIR_REG = 1 | +2.358 ns | 1.640 ns | 0 | 96,544.4 | 17,472 | 645.9 | 0.760 | PASS, 선택 안 함 |
| ASAP7 | PAIR_REG = 0 | -108 ps | 1108 ps | 0 | 7,637.8 | 17,416 | 29,567.9 | 0.127 | PASS, 선택 안 함 |
| ASAP7 | PAIR_REG = 2 | +57 ps | 943 ps | 0 | 7,499.4 | 17,472 | 33,260.9 | 0.128 | PASS, 선택 |
| ASAP7 | PAIR_REG = 1 | +147 ps | 853 ps | 0 | 7,709.3 | 17,472 | 32,355.2 | 0.138 | PASS, 선택 안 함 |
| SKY130HD | PAIR_REG = 0 | -0.231 ns | 8.230 ns | 0 | 518,068 | 17,416 | 58.7 | 4.002 | PASS, 선택 안 함 |
| SKY130HD | PAIR_REG = 2 | +0.674 ns | 7.330 ns | 0 | 485,213 | 17,472 | 64.3 | 3.708 | PASS, 선택 |
| SKY130HD | PAIR_REG = 1 | +1.621 ns | 6.380 ns | 0 | 512,704 | 17,472 | 60.8 | 4.255 | PASS, 선택 안 함 |
| GF180MCU | PAIR_REG = 0 | -5.935 ns | 13.940 ns | 0 | 2,408,910.0 | 17,416 | 7.5 | 96.117 | PASS, 선택 안 함 |
| GF180MCU | PAIR_REG = 2 | -2.746 ns | 10.750 ns | 0 | 2,515,690.0 | 17,472 | 9.2 | 102.033 | PASS, 선택 안 함 |
| GF180MCU | PAIR_REG = 1 | -0.992 ns | 8.990 ns | 0 | 2,530,750.0 | 17,472 | 11.0 | 107.708 | PASS, 선택 |
| IHP SG13G2 | PAIR_REG = 0 | +0.739 ns | 7.260 ns | 0 | 979,990 | 17,416 | 31.9 | 3.099 | PASS, 선택 |
| IHP SG13G2 | PAIR_REG = 2 | +1.791 ns | 6.210 ns | 0 | 1,015,950.0 | 17,472 | 30.7 | 3.311 | PASS, 선택 안 함 |
| IHP SG13G2 | PAIR_REG = 1 | +1.949 ns | 6.050 ns | 0 | 1,034,530.0 | 17,472 | 30.1 | 3.883 | PASS, 선택 안 함 |
관문
- Nangate45: 빌드 3개 재생, 모든 출력 비트 일치; 모든 빌드가 목표 클록 충족; 라우팅 DRC 위반 0.
- ASAP7: 빌드 3개 재생, 모든 출력 비트 일치; 목표 클록 setup 미달 PAIR_REG = 0 108 ps(각자의 최소 주기로 계산); 라우팅 DRC 위반 0.
- SKY130HD: 빌드 3개 재생, 모든 출력 비트 일치; 목표 클록 setup 미달 PAIR_REG = 0 0.231 ns(각자의 최소 주기로 계산); 라우팅 DRC 위반 0.
- GF180MCU: 빌드 3개 재생, 모든 출력 비트 일치; 목표 클록 setup 미달 PAIR_REG = 0 5.935 ns, PAIR_REG = 2 2.746 ns, PAIR_REG = 1 0.992 ns(각자의 최소 주기로 계산); 라우팅 DRC 위반 0.
- IHP SG13G2: 빌드 3개 재생, 모든 출력 비트 일치; 모든 빌드가 목표 클록 충족; 라우팅 DRC 위반 0.
재현
보고하는 줄마다 다른 AWS 인스턴스(같은 이미지·설정의 두 대)의 깨끗한 폴더에서 한 번 더 빌드하고 재생했습니다. 줄마다 라우팅 넷리스트의 SHA-256, 셀 면적, setup 여유, 라우팅 DRC, 재생의 사이클과 결과 줄, 전력을 비교했습니다. 5줄 중 5줄은 모든 항목이 같습니다. 우위는 첫 실행 값이고, 두 번째 실행 값은 JSON(reproduction, rows)에 있습니다.
16 × 16 JSON ↓ · 빌드마다 원자료는 /evidence/compare/lanes256/ 아래에 있습니다.
256 MAC r16: ASAP7·GF180MCU 두 공정
r16을 사이클당 16행 × 16열로 평가하는 두 공정 파일럿입니다. 위 r15 연구와 같은 정수 작업 부하와 같은 두 토큰을 사용하고, 목표 클록과 흐름 조건도 같습니다. 면적·타이밍·에너지는 배치·배선과 재생 활동도로 계산한 도구 추정치입니다. 기준은 공개된 r15 줄과 256 MAC 비교 줄이며, 이번 파일럿에서 기준 줄을 다시 빌드하지 않았습니다. 아래 우위는 첫 실행 값으로 계산합니다.
위 판정의 대상은 r14입니다. r16 결과의 범위는 ASAP7과 GF180MCU입니다. 측정·재현 기록 상태는 수집 완료입니다. 타이밍과 성능 기준의 충족 여부는 아래 표에 있습니다.
측정 결과
| 공정 | M1 GMAC/s/mm² ↑ | M2 pJ/MAC ↓ | M3 bit/MAC ↓ | 셀 면적 (µm²) | 사이클/토큰 | 재생 |
|---|---|---|---|---|---|---|
| ASAP7 | 33,781.4 | 0.127874 | 4.875 | 7,383.8 | 17,472 | PASS |
| GF180MCU | 11.080 | 108.591151 | 4.875 | 2,648,450.0 | 17,472 | PASS |
기준 행과의 차이
| 공정 | 지표 | r16 | r15 | 최선 비교 행 | 비교 값 | 비교 행 대비 | r15 대비 |
|---|---|---|---|---|---|---|---|
| ASAP7 | M1 | 33,781.4 | 33,260.9 | vta16_official | 30,416.2 | +11.1% | +1.6% |
| ASAP7 | M2 | 0.127874 | 0.127711 | vta16_official | 0.122459 | +4.4% | +0.1% |
| ASAP7 | M3 | 4.875 | 4.875 | vta16 | 5.500 | -11.4% | +0.0% |
| GF180MCU | M1 | 11.080 | 10.964 | vta16_official | 8.057 | +37.5% | +1.1% |
| GF180MCU | M2 | 108.591151 | 107.708136 | vta16_official | 88.762214 | +22.3% | +0.8% |
| GF180MCU | M3 | 4.875 | 4.875 | vta16 | 5.500 | -11.4% | +0.0% |
M1은 높을수록, M2·M3는 낮을수록 좋습니다. 지표마다 가장 좋은 비교 줄을 따로 사용합니다. 굵은 우위는 ±1% 안이거나 열세이며, ±1% 안은 이긴 것으로 보지 않습니다. ASAP7: M1 우위, M2 열세, M3 우위; GF180MCU: M1 우위, M2 열세, M3 우위.
클록과 배선 확인
| 공정 | 목표 주기 | setup 여유 | 최소 주기 | M1 주기 | M2 주기 | 배선 DRC |
|---|---|---|---|---|---|---|
| ASAP7 | 1000 ps | +139 ps (충족) | 861 ps | 1000 ps | 1000 ps | 0 |
| GF180MCU | 8.000 ns | -0.503 ns (미달) | 8.500 ns | 8.500 ns | 8.000 ns | 0 |
M1은 목표 클록을 맞추면 목표 주기, 못 맞추면 해당 배치·배선의 최소 주기로 계산합니다. M2는 공통 목표 주기에서 활동도를 적용해 추정한 전력으로 계산합니다. 목표 클록을 못 맞춘 경우, 그 M2를 해당 배치·배선이 충족하는 클록에서 측정한 에너지로 해석할 수 없습니다. 기존 비교와 같이 양쪽 모두 저장소와 호스트 작업을 제외합니다.
재현
| 공정 | 첫 실행 | 두 번째 실행 | 비교 항목 수 | 결과 |
|---|---|---|---|---|
| ASAP7 | AWS instance 1 | AWS instance 2 | 9 | 일치 (다른 인스턴스) |
| GF180MCU | AWS instance 1 | AWS instance 2 | 9 | 일치 (다른 인스턴스) |
비교 항목: 라우팅 넷리스트 SHA-256, 셀 면적, setup 여유, 라우팅 DRC, 토큰당 사이클, 재생 결과 SHA-256, 작업 부하 전력, 재생 결과, 흐름 설정 지문. 재현한 2줄 중 2줄이 모든 항목에서 같고, 2줄은 다른 인스턴스에서 재현했습니다. 두 번째 실행 값과 차이는 JSON에 있습니다. 재생 결과의 일치만으로 타이밍이나 에너지 우위가 성립하지는 않습니다.
r16 JSON ↓ · 공개 보고서 요약은 /evidence/compare/r16/에 있습니다.
가중치 형식별 모델 정확도
같은 모델, 같은 글, 같은 측정 도구입니다. 활성값은 모든 형식에서 토큰별 INT8이고 가중치 형식만 바꿨습니다. 미리 정한 512토큰 창 8개의 퍼플렉시티 증가입니다. 모든 형식을 보정 없이 반올림으로 만들었습니다(GPTQ, AWQ, 회전을 쓰면 순서가 바뀔 수 있습니다).
| 가중치 형식 | 투영 168개 전부 | 층 12 down_proj만 |
|---|---|---|
| CV-GEMV 형식: INT4, 32열 그룹, 8비트 정수 스케일과 4비트 영점 | +14.1% | +0.05% |
| INT4, 32열 그룹, 실수 스케일과 영점 | +14.0% | +0.04% |
| NVFP4 (E2M1, 16원소 블록, E4M3 스케일) | +16.3% | +0.06% |
| INT4, 128열 그룹, 실수 스케일과 영점 | +22.3% | -0.09% |
| MXFP4, 공유 지수 올림 | +25.7% | +0.09% |
| MXFP4, OCP 규격의 공유 지수 | +27.7% | +0.10% |
통과선은 CV-GEMV 형식(+14.1%)이 128열 그룹 INT4(+22.3%)와, 더 나은 인코더의 MXFP4(+25.7%)보다 나쁘지 않을 것을 요구합니다. NVFP4(+16.3%)는 보고만 하고 통과선에는 넣지 않습니다.
최근 모델
최근 공개 모델에서 같은 검사를 했습니다(같은 반올림, 언어 디코더의 모든 선형 층 양자화, 모델 자체 토크나이저). 고정한 판은 models.json에 있습니다.
| 가중치 형식 | Qwen2.5-0.5B | Qwen3.5-0.8B | Qwen3.5-2B | gemma-4-E2B |
|---|---|---|---|---|
| CV-GEMV 형식: INT4, 32열 그룹, 8비트 정수 스케일과 4비트 영점 | +14.1% | +9.8% | +5.9% | +17.7% |
| INT4, 32열 그룹, 실수 스케일과 영점 | +14.0% | +9.2% | +5.9% | +17.3% |
| NVFP4 (E2M1, 16원소 블록, E4M3 스케일) | +16.3% | +10.4% | +5.3% | +14.1% |
| INT4, 128열 그룹, 실수 스케일과 영점 | +22.3% | +16.4% | +8.0% | +36.5% |
| MXFP4, 공유 지수 올림 | +25.7% | +17.8% | +10.1% | +30.9% |
| MXFP4, OCP 규격의 공유 지수 | +27.7% | +16.2% | +11.3% | +26.0% |
Qwen3.5-2B, gemma-4-E2B에서는 NVFP4가 CV-GEMV 형식보다 정확도 손실이 작습니다. 보고만 하고 통과선에는 넣지 않습니다.
관문
- G1 (nangate45), 실제 토큰의 게이트 수준 재생, 출력 불일치 0: 통과
- G2 (nangate45), 최종 넷리스트가 합성본과 형식적으로 동치: 통과
- G3 (nangate45), 배선 DRC 위반 0, 목표 클록 충족: 통과
- G1 (asap7), 실제 토큰의 게이트 수준 재생, 출력 불일치 0: 통과
- G2 (asap7), 최종 넷리스트가 합성본과 형식적으로 동치: 통과
- G3 (asap7), 배선 DRC 위반 0, 목표 클록 충족: 통과
- G4, 두 번째 독립 실행이 같은 표를 냄: 통과: 다른 기계에서 22줄 중 22줄 재현, 차이 0건(표); 빌드 기계의 깨끗한 폴더에서 22줄 중 22줄 재현, 차이 0건(표)
독립 검토
1차(2026-11-06): OpenAI Codex CLI 0.166.0, model gpt-6-astra, reasoning effort low, read-only sandbox; 공개 자료만. 결론: disagree. 검토자가 원자료에서 10줄의 M1~M3를 다시 계산했습니다. 지적은 검토자 원문(영어) 그대로입니다.
| # | 영향 | 지적 (검토자 원문) | 상태 | 한 일 |
|---|---|---|---|---|
| 1 | the verdict | G4 accepts matching subject rows without requiring all comparator rows or evidence of a clean-machine run. The supplied rerun has only eight rows: it omits official VTA, OpenGeMM and Gemmini in both processes. The separate-machine record covers only Nangate45 CV-GEMV and official VTA, and only layout hashes and selected flow metrics—not the complete workload-power table. Thus RULES.md line 61's complete-table reproduction requirement is not established, despite verdict.json and the page marking G4 pass. | 다시 잼 | verdict.py가 이제 판정에 쓰는 모든 줄(두 공정)을 다른 기계에서 모든 숫자가 같게 재현할 것을 요구합니다. 빠진 비교 상대 6줄을 깨끗한 폴더에서 다시 돌리고, 표 전체를 다른 기계에서 다시 만듭니다. 끝: 두 번째 실행 둘 다 14줄 모든 숫자가 같습니다. |
| 2 | a metric | Integer division truncates 136195 cycles over two tokens to 68097 rather than 68097.5. Both OpenGeMM M1 values are overstated by approximately 0.000734%. This favours the comparator and does not reverse the metric outcome. | 고침 | collect.py에서 정확히 나눕니다. 내림은 OpenGeMM에 0.0007% 유리했고 결과는 바뀌지 않습니다. |
| 3 | a metric | TPU and Gemmini replay only token 0, while CV-GEMV, VTA, OpenGeMM and W8A8 replay tokens 0 and 1. Normalizing useful MACs does not make their switching workloads identical. The direction and size of any energy bias remain unmeasured; the page's claim that every engine replays the same real tokens is inaccurate. | 밝힘, 다시 재지 않음 | TPU와 Gemmini는 첫 토큰, 나머지는 두 토큰을 재생한다고 페이지와 규칙에 적었습니다. 두 엔진의 유효 MAC당 에너지는 CV-GEMV의 약 열 배라 토큰 구성으로 결과가 바뀔 수 없습니다. |
| 4 | page wording | The assertion that post-result changes can only favour comparators conflicts with the documented r1-to-r7 subject optimization and process-specific subject selection. Both Nangate45 r7 settings meet timing, so 'the setting that meets the target clock' does not uniquely select PAIR_REG=0. That setting wins M1; PAIR_REG=1 loses. The explicit amended subject names are implemented correctly, but their selection is not demonstrated to be independent of results. | 고침 | 결과 뒤 변경 중 두 가지가 CV-GEMV에 관한 것(r2~r7, 처음 결과 뒤 공정마다 정한 PAIR_REG; Nangate45에서는 두 설정 모두 클록을 맞춰 더 작은 레이아웃을 고름)이라고 규칙과 페이지에 적었습니다. 주장 문장에 구성을 밝혔습니다. |
| 5 | page wording | The W8A8 baseline uses separately quantized per-row INT8 weights, not the W4A8-G32 integers. Its PASS means agreement with its own reference. The baseline is labelled elsewhere, but this universal arithmetic statement is false. | 고침 | W4A8 엔진은 모두 같은 정수를 계산하고 W8A8 기준선은 예외라고 고쳤습니다. |
| 6 | page wording | The 4.9× energy ratio described as 'same RTL' uses Nangate45 PAIR_REG=0 and ASAP7 PAIR_REG=1. It therefore combines process changes with a different register configuration and cycle count. The arithmetic is reproducible, but this is not a controlled same-configuration process ratio. | 고침 | 환산 비율을 두 공정에서 같은 설정(PAIR_REG = 1)으로 다시 계산했습니다(5.6배). |
| 7 | page wording | The parenthetical assigns +14.0% versus +14.1% in the opposite order to the sentence's CV-GEMV-versus-floating-scale comparison. CV-GEMV is +14.131%; floating-scale INT4 g32 is +13.974%. The accuracy table itself has the correct order. | 고침 | 순서를 바로잡았습니다. |
| 8 | none | CV-GEMV RTL, testbench, config.mk and integer fixtures are absent. Its M3 arithmetic reproduces 5.375 from read_count and assumed metadata reads, but the interface widths and metadata-read schedule cannot be independently checked against its implementation here. Likewise, identical utilization settings and cycle_count semantics cannot be fully audited for the subject. This is a disclosed evidence limit, not a demonstrated numerical error. | 바꾸지 않음 | CV-GEMV RTL·테스트벤치·흐름 설정은 평가 계약으로 제공합니다. 이 한계는 재현 묶음 README에 적혀 있습니다. |
| 9 | none | M2 can be reproduced from raw workload power and the supplied window_s, but the underlying SAIF DURATION and activity annotations cannot be independently audited because activity.saif is not included. Agreement with result.json does not independently establish that window extraction was correct. | 고침 | 줄마다 activity-header.txt에 SAIF 머리(시간 단위, 길이)와 전체 SAIF의 SHA-256을 공개합니다. |
2차(2026-11-06): OpenAI Codex CLI 0.166.0, model gpt-6-astra, reasoning effort low, read-only sandbox; 공개 자료만. 결론: confirm. 검토자가 원자료에서 10줄의 M1~M3를 다시 계산했습니다. 지적은 검토자 원문(영어) 그대로입니다.
| # | 영향 | 지적 (검토자 원문) | 상태 | 한 일 |
|---|---|---|---|---|
| 1 | page wording | The claimed fix is incomplete: activity-header.txt is absent for OpenGeMM and Gemmini in both processes. The other 26 headers have 1 ps timescales and durations matching result.json.window_s. For the four missing headers, M2 reproduces using window_s, but its duration cannot be independently checked against a supplied SAIF header. Headers also do not expose full switching activity. | 고침 | OpenGeMM·Gemmini는 처음에 빌드 VM에서 재생했고 그 SAIF를 남기지 않았습니다. 같은 라우팅 넷리스트의 깨끗한 재실행(숫자가 처음 실행과 같음)에서 머리를 가져왔고 파일에 그렇게 적었습니다. |
| 2 | none | G4 checks only a whitelist, despite stating that every number must match. Numeric fields including die_area_um2, clock_used_mhz, useful_mac_per_s, utilization and the secondary metrics are omitted. This is a latent validation gap: independently comparing all supplied row fields found no differences, so it does not invalidate this verdict. | 고침 | G4가 이제 필요한 줄의 모든 숫자 칸을 비교합니다. |
| 3 | none | The documented verdict commands omit --second-machine. With the revised code, these commands necessarily fail G4 and cannot reproduce the published reached verdict. The description that verdict.py reads only summary.json and formats.json is insufficient for a passing G4. | 고침 | 재현 묶음 README의 판정 명령에 --second-machine과 --rerun을 넣었습니다. |
| 4 | a metric | The round-1 workload difference remains: TPU and Gemmini replay token 0 only, whereas the other engines replay two tokens. Their M2 values therefore describe different activity samples. This is now explicitly disclosed and permitted by the dated rules; it is not a newly discovered arithmetic error or a demonstrated reversal. | 다시 잼 | 두 공정의 TPU·Gemmini 넷리스트에 둘째 토큰을 재생했고, 유효 MAC당 에너지 차이는 최대 0.04%입니다(token-check.json). |
| 5 | none | The disclosed round-1 evidence limitation remains: CV-GEMV RTL, testbench and config.mk are absent. Its 5.375-bit M3 reproduces from logged read_count and the stated metadata schedule, but the actual interface, metadata enables, cycle-counter semantics and utilization configuration cannot be independently inspected here. Public comparator interfaces support their stated bases and exclusions. | 바꾸지 않음 | CV-GEMV RTL·테스트벤치·흐름 설정은 평가 계약으로 제공하며, 이 한계는 밝혀 두었습니다. |
3차(2026-11-07): OpenAI Codex CLI 0.166.0, model gpt-6-astra, reasoning effort low, read-only sandbox; 공개 자료만. 결론: confirm(주 판정, r11), confirm(오픈 PDK). 검토자가 원자료에서 11줄의 M1~M3를 다시 계산했습니다. 지적은 검토자 원문(영어) 그대로입니다.
| # | 영향 | 지적 (검토자 원문) | 상태 | 한 일 |
|---|---|---|---|---|
| 1 | none | The code accepts vacuous equivalence and cites a G2 exception absent from RULES.md. The IHP subject's lec.txt explicitly reports no valid outputs to compare. G1 replay cannot establish the formal equivalence required by G2. G2 should fail or remain unestablished. This does not change the current open-PDK 'not reached' outcome, already forced by GF180 timing. | 고침 | 오픈 PDK 판정의 G2가 이제 비교할 출력을 찾지 못한 동치 검사를 열림(pass: false)으로 두고, 페이지에 G1 실제 토큰 재생이 통과한다고 적습니다. |
| 2 | none | The named lockstep.sh is absent from this folder. The six summary log lines report zero mismatches, but without the driver its randomization, extreme-value stretches, reset coverage and comparison predicates cannot be independently inspected. The supplied real-layer testbench and four matching replay logs support unchanged results on those inputs, not exhaustive sequential equivalence. | 고침 | make_package.py가 이제 vta/tuned/lockstep.sh와 w5 공식 VTA 생성 모듈을 reproduce.zip에 넣습니다. |
| 3 | page wording | The three advertised VTA edits are present and mathematically sound, but they do not establish exhaustive optimization parity. VTA still uses cascaded carry-propagating additions for its multioperand dot-product reduction; CV-GEMV received carry-save arithmetic. A carry-save reduction is also applicable to VTA's combinational reduction without adding pipeline stages. Its benefit or harm has not been measured. Conversely, CV-GEMV's group-scale sharing and waiting-group changes have no direct counterpart in this VTA core. | 고침 | 페이지와 vta-tuned/summary.json에 VTA 구조에 해당하는 r9·r10 변경 세 가지를 적용했고 조합 내적 덧셈 트리는 그대로라고 밝혔습니다. |
| 4 | page wording | 'Registers ... unchanged' is imprecise: register positions and pipeline depth remain unchanged, but registered product widths shrink and accumulator registers update during invalid cycles. Valid-result behavior is preserved by the inspected logic; internal state and invalid-cycle data are not identical. | 고침 | 페이지와 vta-tuned/summary.json의 문구를 '파이프라인 단계·유효 결과 지연·결과는 그대로'로 바꿨습니다. |
| 5 | none | The open-PDK verdict says M4b carries over, but its outcome never incorporates the main M4b result. A future format-accuracy failure could therefore leave the open-PDK code verdict reached. All supplied M4b comparisons pass, so this is a latent validation defect, not a current reversal. | 고침 | opdk_verdict가 이제 지표 통과 판정에 M4b도 포함합니다. |
| 6 | page wording | 'All of them stay in the table' is true of summary.json, but the rendered tables omit six earlier CV-GEMV configurations per main process: r2, r2d, r3d, r4d, r5d and r6d. No evidence rows were deleted; the page should distinguish its displayed subset from the complete downloadable table. | 고침 | 페이지에 모든 판을 summary.json에 남기고 이 페이지 표에는 r1과 r7~r11을 표시한다고 적었습니다. |
| 7 | page wording | The earlier r7 verdict is described as 'confirmed by two reviews', but the page's own review record says round 1 disagreed and round 2 confirmed after corrections. | 고침 | '1차 지적을 고친 뒤 2차 검토에서 확인됐습니다'로 바꿨습니다. |
| 8 | none | The documented command omits --opdk-second-machine, so it cannot reproduce the published open-PDK G4 pass or the complete verdict.json. Several surrounding descriptions also still identify r7 as the current subject. | 고침 | 재현 묶음 README의 판정 명령에 --opdk-second-machine을 넣고 설명을 r11까지 맞췄습니다. |
| 9 | page wording | The introductory accounting of post-result changes is stale: RULES.md mentions subject development only through r7, while the page's closing explanation stops at r10. The dated additions and open-PDK history correctly describe r11. The supplied dated prose alone does not independently prove the claim that each rule was committed before its result. | 고침 | RULES.md와 페이지의 '판정 방법' 모두 r2~r11과 2026-11-07 대상 규칙 변경을 적도록 맞췄습니다. |
| 10 | none | The disclosed implementation-evidence limit remains: CV-GEMV RTL and its testbench are unavailable. Its M3 reproduces as (68096×320 + 152×112×8×12)/(896×4864) = 5.375, but the actual metadata-read schedule and counter semantics cannot be independently inspected. VTA's public interface and replay support 5 + 8/8 = 6 bits per useful MAC, with host/storage exclusions as written. | 바꾸지 않음 | CV-GEMV RTL·테스트벤치·흐름 설정은 평가 계약으로 제공하며, 이 한계는 밝혀 두었습니다. |
4차(2026-11-07): OpenAI Codex CLI 0.166.0, model gpt-6-astra, reasoning effort low, read-only sandbox; 공개 자료만. 결론: confirm(주 판정, r11), confirm(오픈 PDK). 검토자가 원자료에서 15줄의 M1~M3를 다시 계산했습니다. 지적은 검토자 원문(영어) 그대로입니다.
| # | 영향 | 지적 (검토자 원문) | 상태 | 한 일 |
|---|---|---|---|---|
| 1 | none | The published corrected logs contain only 'SAT solver finished: UNSAT' and 'Circuits are IDENTICAL'. They omit collected-output counts and database/netlist provenance. The scripts correctly invoke the flow's writer and checker on the row's base databases with only bondpad_70* removed, but these excerpts do not independently establish the requested non-vacuous output collection. This is an evidence gap, not evidence that the corrected comparison was vacuous. | 고침 | 모든 IHP SG13G2 줄의 lec.txt에 읽은 데이터베이스, 비교한 두 넷리스트, 모은 입력·출력 개수(판정 대상 r11c는 출력 2,825개)를 함께 적습니다. 두 기계의 IHP 36줄을 그 기록으로 다시 돌렸고 모두 동일입니다. |
| 2 | none | Open-PDK G4 checks the second-machine table but never checks the supplied clean rerun. The published clean-rerun table contains only Nangate45/ASAP7, so it does not substantiate the 08:33 addition's statement that the new rows were measured on the clean rerun in all five processes. All 33 required open-PDK rows are present and scalar-identical on the second machine. | 고침 | 08:33 조항의 공개본에, 같은 시각에 쓴 내부 원문의 괄호(깨끗한 재실행은 Nangate45·ASAP7)를 되살렸습니다. 오픈 PDK G4는 규칙대로 두 번째 기계를 봅니다. |
| 3 | page wording | The assertion that the original flow compared empty netlists 'for every engine' exceeds the supplied records: ihp-sg13g2-tpu8/lec-flow.txt says 'no final LEC log'. The other 19 IHP flow excerpts explicitly report vacuous equivalence. | 고침 | 페이지와 두 규칙 파일이 이제 '흐름이 그 검사를 돌린 IHP 줄 전부가 빈 넷리스트를 비교했고, TPU는 흐름의 검사 기록이 없다'고 적습니다. |
| 4 | page wording | This unqualified statement conflicts with the disclosed later subject, comparator, G2 and second-machine amendments. The initial open-PDK extension preceded results; the complete current rules did not. | 고침 | 오픈 PDK 절이 이제 '조건은 첫 오픈 PDK 결과 전에 정했고 이후 변경은 규칙에 날짜와 함께 적었다'고 씁니다. |
| 5 | none | The lock-step stimulus exercises common valid gaps, not independently varying input-valid signals, and resets rst only initially. Its six passing runs support sampled valid-result equivalence, not exhaustive sequential equivalence. Inspection shows the relevant valid/reset logic is unchanged, so this does not reveal a functional defect. | 그대로 | 밝힌 대로 둡니다. 맞대기는 공통 유효 신호 공백과 처음 리셋을 봅니다. 산술 항등식은 따로 논증합니다. 유효 입력을 따로 흔들고 중간 리셋을 넣는 자극은 후속 과제입니다. |
| 6 | none | M3 reproduces as 5.375 from tb_read_count and the stated metadata accounting, but private CV-GEMV RTL/testbench prevents independent inspection of the actual metadata-read schedule. This inherited evidence limit remains unchanged. | 그대로 | 이어 온 공개 한계입니다. CV-GEMV RTL·테스트벤치·흐름 설정은 평가 계약으로 제공합니다. |
5차(2026-11-07): OpenAI Codex CLI 0.166.0, model gpt-6-astra, reasoning effort low, read-only sandbox; 공개 자료만. 범위: 판정이 아니라 흐름 설정 시험만. 결론: disagree. 검토자가 원자료에서 30줄의 M1·M2를 다시 계산했습니다. 지적은 검토자 원문(영어) 그대로입니다.
| # | 영향 | 지적 (검토자 원문) | 상태 | 한 일 |
|---|---|---|---|---|
| 1 | page wording | The claim of the same routed netlist on the build machine, Mac and AWS exceeds the supplied evidence. second-machine.json records each row against either Mac or AWS, not both. For example, ASAP7 vta8_csa and vta8_official_csa have AWS comparisons, while the ASAP7 subject has a Mac comparison. G4 establishes scalar-table equality on the required second machine; it does not establish three-machine netlist identity or universal determinism. | 고침 | 첫 문장을 확인한 만큼만 말하도록 고쳤습니다. 줄마다 두 번째 기계 하나(맥 또는 AWS)가 표의 모든 숫자를 재현했고(G4), 주 판정 22줄 모두 라우팅 넷리스트가 같았으며, 공개 설정으로 다시 돌린 ASAP7 세 줄이 AWS에서 모든 숫자를 재현했다는 내용입니다. 클록·DRC·재생 문장은 규칙의 네 변형으로 한정했고, 추가 55% 실행에서 VTA 손 이식판 줄이 1000 ps를 0.30 ps 차이로 못 맞춘 것을 추가 표 아래에 적었습니다. |
| 2 | none | Selecting competitors using only baseline performance can favour CV-GEMV if an excluded VTA row improves more under a changed setting. For example, SKY130HD vta8_official_tuned is excluded with M1 only 5.2071% below the baseline best and M2 7.4794% above it. Its variant performance is unmeasured. This is a limitation of the selected-row study, not an incorrect application of its rule or a demonstrated reversal. | 고침 | 14:34 규칙이 뺀 VTA 14줄을 같은 네 변형으로, 그중 ASAP7 네 줄은 45%·55%로도 돌렸습니다(규칙 2026-11-07 18:48, 실행 전에 커밋). VTA 여섯 줄 전체의 최고값과 비교해도 어느 변형에서나 뒤집히거나 1% 안으로 들어온 지표가 없고, 빠진 줄이 VTA 최고가 된 곳도 없어 우위는 규칙 결과와 같습니다(가장 작은 값 GF180MCU M2 -2.9%, 밀도 여유 0.15). 두 페이지에 규칙 결과와 따로 적었고 한계 문단은 없앴습니다. 7차 교차 검토가 확인했습니다. |
6차(2026-11-07): OpenAI Codex CLI 0.166.0, model gpt-6-astra, reasoning effort low, read-only sandbox; 공개 자료만. 범위: 판정이 아니라 흐름 설정 시험만. 결론: confirm. 검토자가 원자료에서 2줄의 M1·M2를 다시 계산했습니다. 지적은 검토자 원문(영어) 그대로입니다.
| # | 영향 | 지적 (검토자 원문) | 상태 | 한 일 |
|---|
7차(2026-11-08): OpenAI Codex CLI 0.166.0, model gpt-6-astra, reasoning effort low, read-only sandbox; 공개 자료만. 범위: 판정이 아니라 흐름 설정 시험만. 결론: confirm. 검토자가 원자료에서 22줄의 M1·M2를 다시 계산했습니다. 지적은 검토자 원문(영어) 그대로입니다.
| # | 영향 | 지적 (검토자 원문) | 상태 | 한 일 |
|---|
8차(2026-11-08): OpenAI Codex CLI 0.166.0, model gpt-6-astra, reasoning effort low, read-only sandbox; 공개 자료만. 결론: confirm(주 판정, r14), confirm(오픈 PDK). 검토자가 원자료에서 17줄의 M1~M3를 다시 계산했습니다. 지적은 검토자 원문(영어) 그대로입니다.
| # | 영향 | 지적 (검토자 원문) | 상태 | 한 일 |
|---|---|---|---|---|
| 1 | page wording | The sensitivity summary still gives r11 margins: Nangate45 +29.9%/-23.9% and ASAP7 +18.4%/-16.0%. For r14 the smallest margins across the published setting and four variants are +32.1%/-24.2% and +17.6%/-15.4%, respectively. The later 'current subject (r14)' table is correct. | 고침 | '여유가 작은 곳' 끝 항목이 현재 대상(r14)의 흐름 민감도 값을 읽도록 고쳤습니다: Nangate45 +32.1 %/-24.2 %, ASAP7 +17.6 %/-15.4 %. |
| 2 | page wording | The introductory disclosure stops implementation changes at r11, although the current subject includes r12–r14. The dated additions and detailed page history correctly disclose those later changes. | 고침 | RULES.md 첫머리와 페이지 '판정 방식'이 r2~r14 설계 개선으로 적습니다(페이지는 verdict.json의 리비전을 읽음). |
| 3 | none | The brief still identifies r12 as the latest revision and says only ten r12 rows were added. There are thirty added rows covering r12–r14. It also says rounds 1 and 2 confirmed r7, whereas round 1 disagreed and round 2 confirmed after corrections. | 고침 | REVIEW.md가 대상 r14, 더해진 r12~r14 30줄, 06:21·06:41·06:57 규칙과 09:19 기록을 적고, r7은 1차 지적을 고친 뒤 2차가 확인했다고 고쳐 적었습니다. |
| 4 | none | The timing rationale supports leaving pre-register Booth recoding unapplied for the existing critical path, but does not establish that it cannot improve M1 or M2. All 20 tuned/carry-save VTA worst setup paths start after the MACs. Nevertheless, pre-register recoding and one-hot digits remain applicable, unmeasured changes; extra register bits alone do not determine net area or switching power. No missing change with a demonstrated benefit was found. | 한계로 둠 | 페이지는 적용하지 않은 이유(모든 tuned·carry-save VTA 줄의 최악 경로가 MAC 뒤에서 시작해 클록을 줄일 수 없음)와 레지스터 비트가 늘어난다는 점을 적습니다. VTA 면적·에너지에 대한 순효과는 재지 않았습니다. |
| 5 | none | This manifest names machines and hashes for only the 22 main-verdict rows, not the 33 open-PDK rows. The open-PDK second-machine summary is complete and scalar-identical, but does not itself name a machine for each row. Thus the requested per-row machine attribution is not established for the open PDKs by these files. | 그대로 둠 | 오픈 PDK 두 번째 기계 33줄은 모두 맥에서 돌렸습니다(다른 기계에서 연결한 줄 없음). second-machine.json은 주 판정 22줄의 넷리스트 해시만 적습니다. |
| 6 | none | M3 reproduces as (68096×320 + 152×112×8×12)/(896×4864) = 5.375, but the metadata schedule remains a stated accounting basis because CV-GEMV RTL and testbench are private. The logs establish the read counter value, not an independently inspectable implementation of every metadata read. | 그대로 둠 | CV-GEMV의 M3는 비공개 RTL의 계산 방식으로 적은 값이며, 재생 기록의 읽기 수와 맞습니다. |
| 7 | none | The dated entries state the intended ordering, but this package does not independently prove commit-before-result chronology. The supplied rules support the revision-selection logic; they are not an immutable timestamp record of preregistration. | 그대로 둠 | 규칙이 결과보다 먼저라는 순서는 이 묶음이 아니라 저장소 이력(규칙 커밋을 실행 시작 전에 푸시함)과 VM 장부(실행 시각)에 남아 있습니다. |
9차(2026-11-08): OpenAI Codex CLI 0.166.0, model gpt-6-astra, reasoning effort low, read-only sandbox; 공개 자료만. 범위: 판정이 아니라 다른 층·모델 측정만. 결론: confirm. 검토자가 원자료에서 20줄의 M1·M2를 다시 계산했습니다. 지적은 검토자 원문(영어) 그대로입니다.
| # | 영향 | 지적 (검토자 원문) | 상태 | 한 일 |
|---|---|---|---|---|
| 1 | none | Evidence limitation: the supplied shape and fixture manifests match the specified projections and token positions, but the workload generator and its byte-for-byte base-reproduction log are absent. The package also does not independently establish preregistration chronology or execution-machine attribution. | 일부 고침, 나머지는 한계로 둠 | 일부 고침: workloads.json에 기준 투영에서 한 생성기 검사를 넣었습니다(base_check: 파일 15개 바이트 비교, 다른 것 0, fixtures.json이 해시를 공개한 14개는 그 해시와 함께, 모두 같음). 투영 11개의 재생 줄마다 재생한 기계도 적었습니다. 한계로 둠: 생성기 자체는 CV-GEMV 입력 이미지를 쓰므로 RTL과 함께 가며 묶음에 넣지 않습니다. 규칙 항목과 실행의 순서는 묶음이 아니라 저장소의 커밋 시각에 있습니다. |
| 2 | none | Evidence limitation: every runtime-shape comparator names the expected published row, and the runner selects its routed 6_final.v. However, workload records contain row names rather than hashes of the actual netlists consumed. No substituted comparator netlist was found, but byte identity is not independently established by these records. | 고침 | 투영 11개의 재생 줄마다(603줄, 기준 55줄은 기준 표 그대로) 그 재생이 읽은 라우팅 넷리스트의 SHA-256을 적었습니다. 빌드 VM에서는 그곳의 파일을 VM에서 해시했고(vm/netlist_hashes.sh), AWS 인스턴스에서는 올린 파일이나 그곳에서 만든 파일입니다. netlists_read는 공개 라우팅 줄 55개마다 재생이 모두 넷리스트 하나를 읽었고, second-machine.json에 있는 22줄은 그 해시와 같음을 보여 줍니다. |
| 3 | none | The zero-time swap excludes a potentially real loading cost and therefore limits the gate_proj/up_proj results to the prescribed compute-only model. Both commands' cycles and reads are included correctly. Private CV-GEMV RTL, testbench and configs prevent independent inspection of the swap implementation, shape-only rebuilds and metadata-read schedule. | 그대로 둠 | 규칙(08:40)이 시간 0 교체를 정했습니다. 토큰 사이의 질의 교체와 같이 저장소는 모든 엔진 밖에 있습니다. 두 명령의 사이클과 읽기는 모두 셉니다. 이제 페이지에 교체 방식과 두 명령을 모두 센다는 것을 적었습니다. |
| 4 | none | TPU and Gemmini use one token while other engines use two, as allowed by the rules. Their denominators are correct. The base-workload second-token sensitivity result does not establish token sensitivity for these eleven new projections; no demonstrated advantage to CV-GEMV follows from this limitation. | 한계로 둠 | 기준 표와 같이 TPU와 Gemmini는 토큰 하나를 재생합니다(규칙). 이제 이 절에도 적었습니다. 두 엔진의 둘째 토큰 재생(투영 11개, 긴 재생 110회)은 후속으로 두고 여기서는 하지 않았습니다. |
| 5 | none | The failed build is correctly classified as G3 failure, with no subject metrics for gate/up and no subject layer-12 aggregate. Its precise reported cause—one routing violation and unrouted nets—is not independently checkable because the failing route log is absent from this package. | 고침 | evidence/compare/workloads/failed-builds/sky130hd-cv_gemv_r14c_p8_s2432x896/route-excerpt.txt: 상세 라우팅 기록에서 반복마다 남은 위반 수(6,021에서 1까지)와 연결 안 된 넷으로 멈춘 줄을 담았고, 페이지에서 연결했습니다. |
10차(2026-11-08): OpenAI Codex CLI 0.166.0, model gpt-6-astra, reasoning effort low, read-only sandbox; 공개 자료만. 범위: 판정이 아니라 다른 층·모델 측정만. 결론: disagree. 검토자가 앞 회차 뒤에 바뀐 것을 파일과 대조했습니다(바뀐 지표 없음). 지적은 검토자 원문(영어) 그대로입니다.
| # | 영향 | 지적 (검토자 원문) | 상태 | 한 일 |
|---|---|---|---|---|
| 1 | page wording | The status 'fixed' overstates closure. The resolution explicitly retains the absent generator and unavailable preregistration chronology evidence. Added base-check results and machine labels address parts of the original finding, but do not resolve all of it. Label this partially addressed with remaining limits, or split its dispositions. | 고침 | 9차 지적 1의 상태를 '일부 고침, 나머지는 한계로 둠'으로 바꾸고, 고친 부분(기준 재현 기록, 기계)과 한계로 둔 부분(생성기, 실행 순서)을 처리 내용에 나눠 적었습니다. |
| 2 | page wording | The wording says every row carries its replay machine and netlist hash. Only the 603 non-base rows do; all 55 base rows lack these additions. Qualify this as 'every new-workload replay row'. The requested non-base coverage itself passes. | 고침 | 두 페이지와 9차 처리 내용에 투영 11개의 재생 줄(603줄)마다 기계와 넷리스트 해시를 적었고, 기준 55줄은 기준 표 그대로라고 밝혔습니다. |
11차(2026-11-08): OpenAI Codex CLI 0.166.0, model gpt-6-astra, reasoning effort low, read-only sandbox; 공개 자료만. 범위: 판정이 아니라 다른 층·모델 측정만. 결론: confirm. 검토자가 앞 회차 뒤에 바뀐 것을 파일과 대조했습니다(바뀐 지표 없음). 지적은 검토자 원문(영어) 그대로입니다.
| # | 영향 | 지적 (검토자 원문) | 상태 | 한 일 |
|---|
12차(2026-11-10): Antigravity CLI 1.5.3, model Gemini 4 Argon, effort low, terminal sandbox, run in a copy of the public files (OpenAI Codex, used in rounds 4 to 11, was at its usage limit); 공개 자료만. 범위: 판정이 아니라 256 MAC 측정만. 결론: confirm. 검토자가 원자료에서 36줄의 M1·M2를 다시 계산했습니다. 지적은 검토자 원문(영어) 그대로입니다.
| # | 영향 | 지적 (검토자 원문) | 상태 | 한 일 |
|---|---|---|---|---|
| 1 | none | machine(run) in workloads_collect.py checks only whether 'aws' or 'pnr' is in the run folder name, so the 515 non-base replays that reused the 55 base netlists (in run folder ext4b-256-replay) are misclassified as 'Azure build VM', and netlist_sha() then looks in vm_netlists() (64-MAC netlists only) instead of reading netlist-sha256.txt or size256.json. As a result, workloads256.json netlists_read records sha256_by_machine={'Azure build VM': [null]}, one_netlist=false, and equals_size256_json=false for all 55 base builds (and appends null to the 5 w8a8_p32 entries), even though the actual netlist-sha256.txt files in evidence/compare/workloads256/ match size256.json. | 고침 | workloads_collect.py가 이제 256 MAC 투영 줄을 폴더 이름과 상관없이 모두 AWS 인스턴스로 적습니다(17:49 2부: 모두 AWS에서 실행). 재생한 줄의 라우팅 넷리스트는 256 MAC 측정 폴더에서 올린 그 파일로 해시합니다. 이제 netlists_read는 55줄 모두 재생이 넷리스트 하나를 읽었고 그것이 size256.json의 넷리스트와 같음을 보여 줍니다. 바뀐 지표는 없습니다. 재생은 ext3wl-replay, ext3wl-replay2, ext3wl-replay3 폴더에서 돌았고, 지적에 적힌 폴더 이름은 그중에 없습니다. |
| 2 | none | machine(run) in size_collect.py labels any run folder without 'aws' in its name as 'Azure build VM'. Because four of the five reproduction folders (ext3rep-azure, ext3rep-azure-b, ext3rep-hold-asap7, ext3rep-hold-ng45) do not contain 'aws' in their names even though RULES.md 2026-11-10 08:55 and the HTML pages state all 55 reproduction builds ran on AWS instances, size256.json reproduction.machines lists ['AWS instance', 'Azure build VM']. In addition, only the aggregate reproduction summary in size256.json is published, not the second run's per-row raw files. | 고침 | size_collect.py가 이제 이름이 아니라 폴더로 기계를 정합니다. Azure 빌드 VM의 첫 실행 폴더만 Azure이고, ASAP7 대체 설정 빌드와 모든 재현 폴더는 AWS 인스턴스에서 돌았습니다. 이로써 두 페이지의 첫 실행 기계 수도 바로잡혔습니다(AWS 인스턴스 23줄, Azure 빌드 VM 32줄. ASAP7 대체 설정 폴더 이름에 'aws'가 없어 17·38줄로 나왔음). size256.json의 reproduction에는 줄마다 두 번째 실행의 폴더, 기계, 비교한 9개 항목 값을 넣었고, 페이지에 그 위치를 적었습니다. 바뀐 지표는 없습니다. |
| 3 | page wording | RULES.md 17:49 part 2 requires the eleven 256-MAC projections to be reported as in the 08:40 entry ('Gate G1 (zero mismatches) is required on every replay; Gate G3 is checked on every new build and reported'). In workloads256.json, 14 of the 60 new shape builds missed the 8.0 ns target clock (sky130hd cv_gemv_r14c_p32_s896x896 at -0.030 ns, all 12 new gf180 builds at -0.115 to -1.086 ns, and ihp-sg13g2 w8a8_p32_s1536x12288 at -0.007 ns) and were scored at their own minimum periods, but the 'Other layers and models at 256 MACs' section on both HTML pages mentions only '605 replays, every output bit-exact' and omits the 14 Gate G3 setup misses on the 60 new builds. | 고침 | 두 페이지의 256 MAC 투영 절에 목표 클록을 맞추지 못한 새 빌드 14개와 각각의 미달 폭을 적고, 자기 최소 주기로 계산했으며 새 빌드의 라우팅 DRC는 모두 0이라고 적었습니다. |
| 4 | none | Because M2 margins are stored as (subject - best) / best (positive when CV-GEMV has higher energy per MAC and loses, negative when CV-GEMV has lower energy and wins) and smallest_margin() minimizes -kv[1] for M2, workloads256.json by_process.*.smallest.M2 selects the most positive M2 margin (CV-GEMV's worst M2 loss on Nangate45, ASAP7, SKY130HD, and GF180MCU; smallest M2 win on IHP SG13G2) rather than the cell closest to 0% in magnitude. The HTML pages state the full M2 margin ranges accurately. | 그대로 둠 | 08:40 항목에 따라 64 MAC과 같이, 가장 작은 우위는 CV-GEMV에 가장 불리한 칸입니다. M2(낮을수록 좋음)에서는 (대상 - 최고) / 최고가 가장 큰 칸입니다. 이제 페이지의 표 앞에 그렇게 적었습니다. |
13차(2026-11-10): Antigravity CLI 1.5.3, model Gemini 4 Argon, effort low, terminal sandbox, run in a copy of the public files (OpenAI Codex, used in rounds 4 to 11, was at its usage limit); 공개 자료만. 범위: 판정이 아니라 256 MAC 측정만. 결론: confirm. 검토자가 앞 회차 뒤에 바뀐 것을 파일과 대조했습니다(바뀐 지표 없음). 지적은 검토자 원문(영어) 그대로입니다.
| # | 영향 | 지적 (검토자 원문) | 상태 | 한 일 |
|---|
14차(2026-11-10): Antigravity CLI 1.5.4, model Gemini 4 Argon, effort low, terminal sandbox, run in a copy of the public files (OpenAI Codex, used in rounds 4 to 11, was at its usage limit); 공개 자료만. 범위: 판정이 아니라 256 MAC 16 × 16 측정만. 결론: confirm. 검토자가 원자료에서 15줄의 M1·M2를 다시 계산했습니다. 지적은 검토자 원문(영어) 그대로입니다.
| # | 영향 | 지적 (검토자 원문) | 상태 | 한 일 |
|---|---|---|---|---|
| 1 | none | Methodological and evidence limits that could favour CV-GEMV r15 in this study: (1) the 16x16 shape and the PAIR_REG=2 half-way dot-product pipeline option were fixed after inspecting 256-MAC r14 results and synthesis areas (before any r15 place-and-route flow, replay, or power run); (2) three builds per process (PAIR_REG = 0, 2, 1) are built and one is selected by the timing-only rule while the 256-MAC comparator rows from size256.json are reused without rebuilding; and (3) CV-GEMV r15 RTL, testbench, and flow configs remain private, so M3 metadata-read accounting and identical flow settings (beyond constraint.sdc and report headers) cannot be inspected from source. All three points are explicitly disclosed in RULES.md and on both HTML pages, all 15 builds are reported with their full metrics, and the verdicts' subject remains r14. | 고침 | RULES.md(11:20 항목)에는 세 가지가 모두 적혀 있습니다. 페이지에는 둘째와 셋째(빌드 세 개 중 타이밍 규칙으로 하나를 보고하고 15개를 모두 실음, 비교 줄은 다시 빌드하지 않음, r15의 RTL 비공개)만 있었고 첫째가 없었습니다. 두 페이지 구역 첫 문단에 모양과 PAIR_REG = 2 설정을 256 MAC 결과를 본 뒤 r15 줄의 흐름이 하나도 없을 때 RTL 재생과 합성 면적으로 정했다는 것, 다른 모양 하나(8행 × 32열)는 합성으로만 살펴보고 재지 않았다는 것을 적었습니다. 숫자는 바뀌지 않았습니다. |
다시 돌릴 수 없는 논문 설계 (참고만)
아래 수치는 논문 저자의 조건에서 나온 값이고 판정에는 들어가지 않습니다. 나란히 놓으려고 7 nm로 두 가지 방법으로 환산했는데, 두 방법이 서로 다릅니다. Stillmaker–Baas 환산식과, 같은 RTL·같은 설정(CV-GEMV r7, PAIR_REG = 1)을 Nangate45와 ASAP7에서 잰 저희 흐름의 에너지 비(5.6배)입니다. 참고로 ASAP7의 CV-GEMV r7은 유효 MAC당 0.170 pJ, 21,849 GMAC/s/mm²입니다.
| 설계 | 공정, 결과 종류 | 정밀도 | 면적에 든 것 | 보고된 pJ/MAC | 7 nm 환산 pJ/MAC | 7 nm·1 GHz 환산 GMAC/s/mm² |
|---|---|---|---|---|---|---|
| Hybrid systolic array accelerator for edge LLM inference (Chen et al., Cornell), ISLPED 2025 | 28 nm, post-layout simulation | W4A8 (MXINT4 weights, INT8 activations) | 0.636 mm² as reported; whether SRAM is included is not stated | 0.844 | 0.140 ~ 0.233 | 2,520 |
| OpenGeMM (KU Leuven MICAS), arXiv 2411.09543 | 16 nm, synthesis | INT8 x INT8 | cell area including a 270 KiB scratchpad (63.5 % of it) | 0.427 | 0.252 ~ 0.198 | 3,085 |
| Siracusa with N-EUREKA (ETH Zurich / Univ. Bologna), IEEE JSSC 59(7), 2024 | 16 nm, measured silicon | INT8 activations x 8-bit weights (bit-serial) | whole 10.7 mm² cluster including MRAM, SRAM and RISC-V cores | 0.746 | 0.479 ~ 0.347 | 290 |
| Precision-scalable microscaling datapath (Cuyckens et al., KU Leuven), MXINT8 mode, ASP-DAC 2026 | 22 nm, synthesis | MXINT8 x MXINT8 | 0.60 mm² including scratchpad | 3.044 | 0.800 ~ 1.052 | 449 |
| Precision-scalable microscaling datapath (Cuyckens et al., KU Leuven), MXFP4 mode, ASP-DAC 2026 | 22 nm, synthesis | MXFP4 x MXFP4 (4-bit activations: a different problem) | 0.60 mm² including scratchpad | 0.492 | 0.129 ~ 0.170 | 3,593 |
- ISLPED 2025의 W4A8 디코드 가속기는 7 nm로 환산하면 MAC당 0.14~0.23 pJ로, CV-GEMV 값을 사이에 둡니다. 그 값은 배열을 다 쓸 때의 최대치이고 저희 값은 배치 1의 유효 작업 기준입니다. 다시 돌려 보기 전에는 어느 쪽이 낮은지 말할 수 없습니다.
- ASP-DAC 2026 데이터 경로의 MXFP4 모드는 0.13~0.17 pJ로 환산되지만 활성값도 4비트라 W4A8과 다른 문제입니다.
- 면적당 처리량은 같은 기준으로 비교할 수 없습니다. 논문 면적 대부분에 스크래치패드 메모리가 들어 있고 모두 최대치입니다.
판정 방법
통과선은 판정 전에 썼습니다. 모든 지표가 두 공정 모두에서 모든 비교 상대를 이겨야 하고, ±1% 안은 이긴 것으로 치지 않습니다. 결과를 본 뒤 바꾼 것은 날짜를 붙여 덧붙였습니다. 그 대부분은 비교 상대에게만 유리할 수 있는 변경(VTA tuned·carry-save 줄 포함)이고, 세 가지는 CV-GEMV 자신에 관한 것이라 위에 밝혔습니다. r2~r14 단계의 설계 개선, 유일한 빌드 설정(PAIR_REG)을 첫 r7 결과를 본 뒤 공정마다 정한 것, 2026-11-07에 판정 대상을 r7에서 최신 리비전으로 바꾸면서 PAIR_REG를 타이밍 규칙으로 정한 것입니다. 스크립트가 표에 통과선을 적용하고, 작성자와 다른 계열의 모델 검토자가 원자료를 읽고 확인하거나 이견을 냅니다. 이견은 다시 재서 정합니다.
원자료
비교표 JSON ↓ · 코드 판정 JSON ↓ · 수 형식 JSON ↓ · 작업 데이터 해시 ↓
재현: 비교 스크립트, 공개 엔진의 흐름 설정, 테스트벤치는 재현 묶음에 있습니다. 흐름은 고정한 이미지 openroad/orfs@sha256:9aeafa602de8317ea294ec24b95755437546111a08e4e1bce452339401da14b2에서 돕니다.