삼진 행렬곱 커널 — CUDA 대응 1단계
개요
젯슨토르 NVIDIA CUDA 대응 자체 스택의 1단계. "효율이 아닌 논리로 압도" — NVIDIA가 FP4 곱셈기 2560개로 미는 행렬곱을, 크라우니는
곱셈기 0개의 삼진 부호누산(W∈{-1,0,+1} 부호별 가/감/스킵)으로 받는다. 같은 진리표가 소프트웨어(VM)와 실리콘(VHDL) 양쪽에서 동일하게 돈다.
무엇을 했는지
- 한선씨 커널
삼진행렬곱.한선 작성 — 삼진_내적축(곱셈 없는 MAC) + 삼진_행렬곱(행×열) + 행렬_출력. 평면 row-major(배열 1023 상한 회피), 음수리터럴 0-1, 누산 단순항, import-safe.
- VM 검증 3/3 — C1(2x3·3x2)=[4,1,10,1], C2(항등 삼진가중치)=[7,8,9], C3(전부음)=[-24]. 손계산 기대값과 일치.
- VHDL 동반
rtl/vhdl/trit_dot.vhd — 한선씨 삼진_내적축 루프와 if/elsif 1:1 (곱셈기 0개). trit_mac.vhd 2비트 인코딩 MAC과 동형.
- GHDL 검증
tb_trit_dot.vhd 자가검증 — yA=4, yB=-24, VM 결과와 완전 일치 (PASS).
관련 파일
/Users/ef/CrownyOS/crownyc/libs/삼진행렬곱.한선 — 커널 (정본)
/Users/ef/CrownyOS/crownyc/rtl/vhdl/trit_dot.vhd — VHDL RTL 동반
/Users/ef/CrownyOS/crownyc/rtl/vhdl/tb_trit_dot.vhd — GHDL 테스트벤치
- VM opcode 동형:
crownyc/crownyc_vm_core.c OP_TMAC(463)
- 기존 MAC 셀:
crowny-butler/libs/trit_mac.vhd ↔ 트릿맥하드.한선
- 학습DB 패턴:
삼진_행렬곱_곱셈없는matmul, 지식셀 #9647
검증 방법 (재현)
bash# VM
cd /Users/ef/CrownyOS/crownyc && export CROWNY_STD=$PWD/libs
./hanseonc_high /tmp/삼진행렬곱_검증.한선 > /tmp/x.toau && ./crownyc run /tmp/x.toau
# VHDL
cd rtl/vhdl && ghdl -a --std=08 trit_dot.vhd tb_trit_dot.vhd && \
ghdl -e --std=08 tb_trit_dot && ghdl -r --std=08 tb_trit_dot --stop-time=10ns
잔여 이슈 / 다음 단계
- 2단계 후보(병렬 fan-out): 삼진_컨볼루션, 삼진_어텐션(softmax는 정수근사 필요), 삼진_레이어놈 — matmul 템플릿 위에 확장.
- 블록 샤딩: mk / kn / m*n > 1023 시 평면 배열 분할 (상위층). 현재 커널은 단일블록.
- VHDL 합성판: trit_dot는 integer형(시뮬 정합용). 실 FPGA/ASIC은 trit_mac.vhd의 2비트 인코딩(Frieder-Luk)으로 폭 확정 필요.
- GPU 디스패치: Blackwell SM 디스패치 계층은 미존재(축2 갭). 현재 전부 CPU VM.
- 자기개선 루프(축4)·헌법 집사임베딩(축5): 별도 단계.