168b0c89f0
Follow-up to the bilingual-structure commit: docs/adr-ko/ now holds only Korean versions (24 files translated from English placeholders), ADR-0013 slug uses kebab-case in both folders, and the verify tool allows translated parenthetical commentary in the Status block. - Translate 24 English files in docs/adr-ko/ to Korean. The previous bilingual-structure commit had left these as English copies because their source content was already English; this commit fulfills the policy that docs/adr-ko/ contains only Korean. - Rename ADR-0013 in both adr/ and adr-ko/ from ver-verification_strategy.md to ver-verification-strategy.md (kebab-case consistency with other ADRs). - CLAUDE.md (ADR Translation Discipline): clarify that only the Status lifecycle keyword (Accepted / Proposed / Stub / Draft / Superseded by ADR-NNNN / Merged into ADR-NNNN) must match across EN and KO; parenthetical commentary and trailing list items may be translated. - tools/verify_adr_lang_pairs.py: replace byte-equal Status check with normalize_status_keyword() which strips parenthetical commentary and takes only the first non-empty line. - tests/test_verify_adr_lang_pairs.py: update existing test names, add coverage for translated parenthetical, translated trailing list, and Superseded-by-NNNN keyword equality. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
3.1 KiB
3.1 KiB
ADR-0007: 런타임 API 및 시뮬레이션 엔진 경계
Status
Accepted
Context
시뮬레이터는 책임이 명확히 다른 여러 계층으로 구성된다:
- 벤치마크와 사용자 코드가 사용하는 호스트 대상 API 계층,
- 요청을 실행하는 이산 이벤트 시뮬레이션 엔진,
- 하드웨어 동작을 모델링하는 디바이스 컴포넌트.
엄격한 경계가 없으면 오케스트레이션 로직이 컴포넌트로 누출되거나 시뮬레이션 내부가 사용자 대상 API와 얽힐 수 있다.
본 ADR은 다음 사이의 명확한 책임 경계를 정의한다:
- 런타임 API,
- 시뮬레이션 엔진 (sip_engine),
- 하드웨어 컴포넌트.
Decision
D1. 런타임 API는 호스트 대상 오케스트레이션만 담당
런타임 API는 호스트/드라이버 수준의 동작을 표현하며 다음을 해야 한다:
- 고수준 동작 노출 (텐서 배포, 커널 launch),
- 엔드포인트 컴포넌트(예: IO_CPU)에만 요청 제출,
- futures/handles로 완료 대기,
- 호스트측 메타데이터(텐서 할당 맵, 커널 바인딩)의 소유와 영속화.
런타임 API가 해서는 안 되는 것:
- hop-by-hop 라우팅 또는 fan-out 하드코딩,
- 내부 컴포넌트(M_CPU, PE_CPU, 엔진) 직접 호출,
- 토폴로지나 라우팅 관련 가정 내장.
D2. 시뮬레이션 엔진은 컴포넌트를 연결하고 완료를 추적
시뮬레이션 엔진(sim_engine)은 다음을 해야 한다:
- 초기화 시점에 컴포넌트 연결 (컴포넌트 포트/와이어 프레임워크에 따라 포트 store 생성 + 와이어 프로세스 시작 — ADR-0015),
- 컴파일된 토폴로지 그래프의 진입 컴포넌트(예: 메모리 동작은 PCIE_EP, 커널 launch는 IO_CPU)에 요청 주입,
- 이산 이벤트 모델로 이벤트 스케줄링과 실행,
- correlation ID와 완료 추적 관리.
시뮬레이션 엔진이 해서는 안 되는 것:
- 텐서 시맨틱 정의,
- 커널 실행 정책 정의,
- 런타임 API에 내부 그래프 세부사항 노출,
- 요청 실행 중에 토폴로지 경로를 따라 걷기,
- 컴포넌트의
run()메서드 직접 호출, - hop별 레이턴시 추적 또는 fan-out 분해 (컴포넌트의 책임).
D3. 컴포넌트가 fan-out과 집계를 담당
디바이스측 컴포넌트는 다음을 해야 한다:
- 요청을 하위 도메인으로 fan-out (IO_CPU → M_CPU → PE_CPU → 스케줄러/엔진),
- 완료·실패 신호 집계,
- 결정론적으로 상위로 결과 전파.
런타임 API와 시뮬레이션 엔진 모두 컴포넌트 수준의 fan-out을 명시적으로 오케스트레이션해서는 안 된다.
Consequences
- 토폴로지와 라우팅이 변해도 런타임 API는 안정적이다.
- 시뮬레이션 내부는 사용자 대상 코드에 영향을 주지 않고 변경 가능하다.
- 컴포넌트 구현은 DI로 교체 가능한 상태가 유지된다.
Links
- SPEC R4, R7, R8
- ADR-0008 (텐서 배포)
- ADR-0009 (커널 실행)
- ADR-0015 (컴포넌트 포트/와이어 모델과 엔진 역할)
- ADR-0010 (CLI 표면과 실행 시맨틱 — 런타임 API 소비자)