sparkle/native/ext/pool/demand.h
fiser_jun 4745f264b2
2026-08-04 14:34:00 +08:00

30 lines
2.0 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Phase 2 方案B真实区槽状态 C++ 全接管1 次同步版)+ demand_dual。
// 复刻 Python ResidentExpertPool 的 free/LFU 语义,成为 dual-source decode 真实区唯一权威。
#pragma once
#include "../common.h"
void real_init(int layer, int cap); // 初始化某层真实区(cap 槽全空闲),幂等
std::vector<int> real_region_contents(int layer); // [expert, slot, ...]
int real_region_count(int layer);
void real_reset();
// AUTOPIN注册 pinned 热专家(驱逐免选),返回平行槽位(-1=分不到);前置 real_init。
std::vector<int> real_pin(int layer, const std::vector<int>& experts);
// 该层 pinned(永不可驱逐)专家数。调用方据此算「可安放的唯一专家上限」= cap pinned
// 用于在超容量前把该前向分流到 host/fetch 路径(超了会落 0 号槽 → 逐位错算)。
int real_pinned_count(int layer);
// AUTOPIN导出各层 LFU 累计频次,扁平 [layer, expert, count, ...]。
std::vector<long> real_freq_dump();
// demand 全接管inds 惰性(内部 eval 一次)side_gen 侧区代pool_list 为 _segs 顺序池数组。
mx::array demand_dual(
const mx::array& inds, const std::vector<mx::array>& pool_list,
const std::vector<int>& seg_nbytes, int layer, int side_gen, const std::string& path,
int stride, int cap, bool lfu, int decay_interval, mx::StreamOrDevice s);
// [hitpos, misspos, loads, fallback01, unplaced]
// unplaced本次分不到槽、被迫落 0 号槽的唯一专家数。>0 即该前向逐位错算(必须为 0)。
std::vector<long> demand_last_stats();
std::vector<double> demand_timings(); // [inds_eval, pool_eval, state, build] us
void demand_timing_enable(bool on);
// 测试壳:纯状态推进(不 pread/不侧区),返回 local 槽位;供 LFU 驱逐等价对拍。
std::vector<int> real_debug_place(int layer, const std::vector<int>& experts_flat, int cap,
bool lfu, int decay_interval);