HAIDOX
HAIDOX Help

Math Engine Reference: Unlimited

개요

ABI version 1 unlimited 이름을 보존하는 FULL mode 호환 header다.

Session과 call resolution은 caller-owned 값만 사용하며 mutable global mode가 없다. 새 source는 math_engine_full.h를 include한다. 이 계층은 계산 kernel을 복제하지 않고 기존 execution planner와 mode context를 조합하며 비트 수 무제한을 뜻하지 않는다.

공개 API

Header 사용 시작

이 module의 public declaration을 사용하려면 installed SDK의 다음 header를 include한다.

#include <math_engine/math_engine_unlimited.h>

Type과 callback

math_engine_unlimited_session_t

Immutable capability snapshot과 session 기본 mode.

typedef struct math_engine_unlimited_session {
    uint32_t struct_size; /**< Caller가 =sizeof(math_engine_unlimited_session_t)=로 설정하는 byte 크기다. */
    uint32_t struct_version; /**< =MATH_ENGINE_UNLIMITED_SESSION_VERSION_1=인 session ABI version이다. */
    uint32_t default_mode; /**< Override가 없는 call에 적용하는 지원된 =math_engine_mode_t= 값이다. */
    uint32_t flags; /**< Version 1 session flag bitset이다. 정의되지 않은 bit는 0이어야 한다. */
    math_engine_capability_descriptor_t capabilities; /**< Session 생성 시 복사한 immutable linked-artifact capability snapshot이다. */
    uint64_t session_fingerprint; /**< Default mode와 canonical capability field에서 계산한 deterministic fingerprint다. */
    uint64_t reserved[3]; /**< 향후 ABI 확장용 세 slot이다. Producer는 모두 0을 기록하고 caller가 보존해야 한다. Session validation은 nonzero 값을 INVALID_ARGUMENT로 거부한다. */
} math_engine_unlimited_session_t;
  • math_engine_unlimited_session_t.struct_size

    Caller가 sizeof(math_engine_unlimited_session_t) 로 설정하는 byte 크기다.

    uint32_t struct_size;
    
  • math_engine_unlimited_session_t.struct_version

    MATH_ENGINE_UNLIMITED_SESSION_VERSION_1 인 session ABI version이다.

    uint32_t struct_version;
    
  • math_engine_unlimited_session_t.default_mode

    Override가 없는 call에 적용하는 지원된 math_engine_mode_t 값이다.

    uint32_t default_mode;
    
  • math_engine_unlimited_session_t.flags

    Version 1 session flag bitset이다. 정의되지 않은 bit는 0이어야 한다.

    uint32_t flags;
    
  • math_engine_unlimited_session_t.capabilities

    Session 생성 시 복사한 immutable linked-artifact capability snapshot이다.

    math_engine_capability_descriptor_t capabilities;
    
  • math_engine_unlimited_session_t.session_fingerprint

    Default mode와 canonical capability field에서 계산한 deterministic fingerprint다.

    uint64_t session_fingerprint;
    
  • math_engine_unlimited_session_t.reserved

    향후 ABI 확장용 세 slot이다. Producer는 모두 0을 기록하고 caller가 보존해야 한다. Session validation은 nonzero 값을 INVALID_ARGUMENT로 거부한다.

    uint64_t reserved[3];
    

math_engine_unlimited_call_request_t

mode_override=INVALID이면 session 기본 mode를 사용한다.

typedef struct math_engine_unlimited_call_request {
    uint32_t struct_size; /**< Caller가 =sizeof(math_engine_unlimited_call_request_t)=로 설정하는 byte 크기다. */
    uint32_t struct_version; /**< =MATH_ENGINE_UNLIMITED_CALL_REQUEST_VERSION_1=인 request ABI version이다. */
    uint32_t mode_override; /**< INVALID이면 session default, 아니면 이 call에만 적용할 =math_engine_mode_t= 값이다. */
    uint32_t workload_class; /**< Backend 선택을 구체화하는 =math_engine_workload_class_t= 값이다. */
    uint32_t requested_precision_bits; /**< 요청 significand precision(bit)이다. 0이면 effective mode 기본값을 사용한다. */
    uint32_t flags; /**< =MATH_ENGINE_UNLIMITED_CALL_FLAG_*= bit의 조합이다. */
    double observed_error_bound; /**< 이전 stage가 관측한 finite nonnegative 무차원 error bound다. */
    double observed_residual; /**< 이전 stage가 관측한 finite nonnegative 무차원 residual이다. */
    double target_error_bound; /**< 승격을 판단할 finite nonnegative 무차원 target이다. 0이면 관측 기반 승격을 끈다. */
    uint64_t reserved[2]; /**< 향후 ABI 확장용 두 slot이다. Caller는 모두 0으로 설정해야 하며 nonzero request는 INVALID_ARGUMENT로 거부된다. */
} math_engine_unlimited_call_request_t;
  • math_engine_unlimited_call_request_t.struct_size

    Caller가 sizeof(math_engine_unlimited_call_request_t) 로 설정하는 byte 크기다.

    uint32_t struct_size;
    
  • math_engine_unlimited_call_request_t.struct_version

    MATH_ENGINE_UNLIMITED_CALL_REQUEST_VERSION_1 인 request ABI version이다.

    uint32_t struct_version;
    
  • math_engine_unlimited_call_request_t.mode_override

    INVALID이면 session default, 아니면 이 call에만 적용할 math_engine_mode_t 값이다.

    uint32_t mode_override;
    
  • math_engine_unlimited_call_request_t.workload_class

    Backend 선택을 구체화하는 math_engine_workload_class_t 값이다.

    uint32_t workload_class;
    
  • math_engine_unlimited_call_request_t.requested_precision_bits

    요청 significand precision(bit)이다. 0이면 effective mode 기본값을 사용한다.

    uint32_t requested_precision_bits;
    
  • math_engine_unlimited_call_request_t.flags

    MATH_ENGINE_UNLIMITED_CALL_FLAG_* bit의 조합이다.

    uint32_t flags;
    
  • math_engine_unlimited_call_request_t.observed_error_bound

    이전 stage가 관측한 finite nonnegative 무차원 error bound다.

    double observed_error_bound;
    
  • math_engine_unlimited_call_request_t.observed_residual

    이전 stage가 관측한 finite nonnegative 무차원 residual이다.

    double observed_residual;
    
  • math_engine_unlimited_call_request_t.target_error_bound

    승격을 판단할 finite nonnegative 무차원 target이다. 0이면 관측 기반 승격을 끈다.

    double target_error_bound;
    
  • math_engine_unlimited_call_request_t.reserved

    향후 ABI 확장용 두 slot이다. Caller는 모두 0으로 설정해야 하며 nonzero request는 INVALID_ARGUMENT로 거부된다.

    uint64_t reserved[2];
    

math_engine_unlimited_call_trace_t

Call별 effective mode, canonical execution plan과 deterministic provenance.

typedef struct math_engine_unlimited_call_trace {
    uint32_t struct_size; /**< Caller가 =sizeof(math_engine_unlimited_call_trace_t)=로 설정하는 byte 크기다. */
    uint32_t struct_version; /**< =MATH_ENGINE_UNLIMITED_CALL_TRACE_VERSION_1=인 trace ABI version이다. */
    uint32_t session_default_mode; /**< Session이 보유한 기본 =math_engine_mode_t= 값이다. */
    uint32_t requested_mode; /**< Override 해석 뒤 call이 요청한 =math_engine_mode_t= 값이다. */
    uint32_t effective_mode; /**< Workload·관측치·capability 적용 뒤 실제 실행할 concrete mode다. */
    uint32_t flags; /**< =MATH_ENGINE_UNLIMITED_TRACE_FLAG_*= provenance bit의 조합이다. */
    math_engine_execution_trace_t execution; /**< Effective mode로 생성한 canonical backend/kernel execution plan이다. */
    double observed_error_bound; /**< Resolution에 사용한 finite nonnegative 무차원 observed error다. */
    double observed_residual; /**< Resolution에 사용한 finite nonnegative 무차원 observed residual이다. */
    uint64_t session_fingerprint; /**< 입력 session fingerprint의 검증된 복사본이다. */
    uint64_t call_fingerprint; /**< Session, request, effective mode와 execution plan을 결합한 deterministic fingerprint다. */
    uint64_t reserved[2]; /**< 향후 ABI 확장용 두 slot이다. Producer는 모두 0을 기록하고 consumer는 무시한다. */
} math_engine_unlimited_call_trace_t;
  • math_engine_unlimited_call_trace_t.struct_size

    Caller가 sizeof(math_engine_unlimited_call_trace_t) 로 설정하는 byte 크기다.

    uint32_t struct_size;
    
  • math_engine_unlimited_call_trace_t.struct_version

    MATH_ENGINE_UNLIMITED_CALL_TRACE_VERSION_1 인 trace ABI version이다.

    uint32_t struct_version;
    
  • math_engine_unlimited_call_trace_t.session_default_mode

    Session이 보유한 기본 math_engine_mode_t 값이다.

    uint32_t session_default_mode;
    
  • math_engine_unlimited_call_trace_t.requested_mode

    Override 해석 뒤 call이 요청한 math_engine_mode_t 값이다.

    uint32_t requested_mode;
    
  • math_engine_unlimited_call_trace_t.effective_mode

    Workload·관측치·capability 적용 뒤 실제 실행할 concrete mode다.

    uint32_t effective_mode;
    
  • math_engine_unlimited_call_trace_t.flags

    MATH_ENGINE_UNLIMITED_TRACE_FLAG_* provenance bit의 조합이다.

    uint32_t flags;
    
  • math_engine_unlimited_call_trace_t.execution

    Effective mode로 생성한 canonical backend/kernel execution plan이다.

    math_engine_execution_trace_t execution;
    
  • math_engine_unlimited_call_trace_t.observed_error_bound

    Resolution에 사용한 finite nonnegative 무차원 observed error다.

    double observed_error_bound;
    
  • math_engine_unlimited_call_trace_t.observed_residual

    Resolution에 사용한 finite nonnegative 무차원 observed residual이다.

    double observed_residual;
    
  • math_engine_unlimited_call_trace_t.session_fingerprint

    입력 session fingerprint의 검증된 복사본이다.

    uint64_t session_fingerprint;
    
  • math_engine_unlimited_call_trace_t.call_fingerprint

    Session, request, effective mode와 execution plan을 결합한 deterministic fingerprint다.

    uint64_t call_fingerprint;
    
  • math_engine_unlimited_call_trace_t.reserved

    향후 ABI 확장용 두 slot이다. Producer는 모두 0을 기록하고 consumer는 무시한다.

    uint64_t reserved[2];
    

Macro와 constant

MATH_ENGINE_UNLIMITED_CALL_FLAG_ESCALATE_UNCERTAIN

Initial backend 결과가 uncertain이면 더 강한 FULL backend로 승격하도록 허용하는 request bit다.

#define MATH_ENGINE_UNLIMITED_CALL_FLAG_ESCALATE_UNCERTAIN \
    (UINT32_C(1) << 0u)

MATH_ENGINE_UNLIMITED_CALL_REQUEST_VERSION_1

math_engine_unlimited_call_request_t historical storage의 최초 안정 ABI version이다.

#define MATH_ENGINE_UNLIMITED_CALL_REQUEST_VERSION_1 UINT32_C(1)

MATH_ENGINE_UNLIMITED_CALL_TRACE_VERSION_1

math_engine_unlimited_call_trace_t historical storage의 최초 안정 ABI version이다.

#define MATH_ENGINE_UNLIMITED_CALL_TRACE_VERSION_1 UINT32_C(1)

MATH_ENGINE_UNLIMITED_SESSION_VERSION_1

math_engine_unlimited_session_t historical storage의 최초 안정 ABI version이다.

#define MATH_ENGINE_UNLIMITED_SESSION_VERSION_1 UINT32_C(1)

MATH_ENGINE_UNLIMITED_TRACE_FLAG_CALL_OVERRIDE

Call request의 valid mode override를 사용했음을 나타내는 trace bit다.

#define MATH_ENGINE_UNLIMITED_TRACE_FLAG_CALL_OVERRIDE \
    (UINT32_C(1) << 1u)

MATH_ENGINE_UNLIMITED_TRACE_FLAG_DEFAULT_MODE

Call이 session default mode를 override 없이 사용했음을 나타내는 trace bit다.

#define MATH_ENGINE_UNLIMITED_TRACE_FLAG_DEFAULT_MODE \
    (UINT32_C(1) << 0u)

MATH_ENGINE_UNLIMITED_TRACE_FLAG_FINANCE_LOCK

Money workload가 effective mode를 FINANCE_FIXED로 고정했음을 나타내는 trace bit다.

#define MATH_ENGINE_UNLIMITED_TRACE_FLAG_FINANCE_LOCK \
    (UINT32_C(1) << 3u)

MATH_ENGINE_UNLIMITED_TRACE_FLAG_OBSERVED_ESCALATION

관측 error/residual이 target을 넘어 effective mode를 승격했음을 나타내는 trace bit다.

#define MATH_ENGINE_UNLIMITED_TRACE_FLAG_OBSERVED_ESCALATION \
    (UINT32_C(1) << 2u)

Function

math_engine_unlimited_session_init

Immutable capability snapshot과 지원되는 기본 mode로 session을 초기화한다.

  • 매개변수 default_mode: 호출별 override가 없을 때 사용할 mode.
  • 매개변수 capabilities: 검증할 immutable capability descriptor.
  • 매개변수 out_session: size/version을 설정한 caller output.
  • 반환: 성공 시 OK. 잘못된/미지원 mode, capability 또는 output ABI에서는 output을

보존한다. 결과 fingerprint는 canonical capability field와 mode에 deterministic하다. Input과 output은 overlap하지 않아야 하고 pointer는 보관하지 않는다.

  • Math Engine ownership: capabilities=borrowed out_session=caller
  • Math Engine nullable: capabilities=false out_session=false
  • Math Engine thread_safety: safe
MATH_ENGINE_API math_engine_status_t math_engine_unlimited_session_init(
    math_engine_mode_t default_mode,
    const math_engine_capability_descriptor_t* capabilities,
    math_engine_unlimited_session_t* out_session);

math_engine_unlimited_session_validate

Session 구조, nested capability와 fingerprint를 다시 검증한다.

  • 매개변수 session: 검증할 immutable caller-owned session snapshot.
  • 반환: 유효하고 default mode가 지원되면 OK. 입력은 변경하지 않는다.
  • Math Engine ownership: session=borrowed
  • Math Engine nullable: session=false
  • Math Engine thread_safety: safe
MATH_ENGINE_API math_engine_status_t math_engine_unlimited_session_validate(
    const math_engine_unlimited_session_t* session);

math_engine_unlimited_call_resolve

호출별 mode를 해석해 독립 context와 deterministic execution trace를 만든다.

  • 매개변수 session: 검증할 immutable capability/default-mode snapshot.
  • 매개변수 request: override/workload/precision과 관측 오차를 담은 immutable request.
  • 매개변수 out_context: 성공 시 effective mode 기본 policy로 초기화되는 caller output.
  • 매개변수 out_trace: size/version을 설정한 caller output.
  • 반환: 성공 시 OK. 유효하지 않은 finite nonnegative 관측값, 금지된 finance 조합,

capability/precision/ABI 오류에서는 두 output을 모두 보존한다.

Call별 mode를 해석해 실제 canonical kernel에 전달할 독립 context와 trace를 만든다. FULL money는 항상 FINANCE_FIXED이며, observed error/residual이 target을 넘는 realtime call은 GAME_FAST 시작점에서 PC_PRECISION으로 승격한다. Error bound와 residual은 dimensionless이며 target 0은 관측 기반 승격 없음이다. 모든 input/output storage는 non-overlapping이고 library가 pointer를 보관하지 않는다.

  • Math Engine ownership: session=borrowed request=borrowed out_context=caller out_trace=caller
  • Math Engine nullable: session=false request=false out_context=false out_trace=false
  • Math Engine thread_safety: safe
MATH_ENGINE_API math_engine_status_t math_engine_unlimited_call_resolve(
    const math_engine_unlimited_session_t* session,
    const math_engine_unlimited_call_request_t* request,
    math_engine_context_t* out_context,
    math_engine_unlimited_call_trace_t* out_trace);