# 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 소비자)