Skip to main content

sim_lib_compute_model/
site.rs

1//! Loadable modeled compute site exports.
2
3use std::sync::Arc;
4
5use sim_kernel::{
6    AbiVersion, DefaultFactory, Export, Factory, Lib, LibManifest, LibTarget, Linker, Result,
7    Symbol, Version,
8};
9use sim_lib_numbers_tensor::TensorSite;
10
11use crate::model::{ModeledComputeProfile, ModeledTensorExecutor};
12
13/// Runtime library symbol for the modeled compute provider.
14pub fn compute_model_lib_symbol() -> Symbol {
15    Symbol::qualified("compute", "model-lib")
16}
17
18/// Site symbol exported by the modeled compute provider.
19pub fn compute_model_site_symbol() -> Symbol {
20    Symbol::new("site/compute/model")
21}
22
23/// Loadable library that registers the modeled compute site.
24#[derive(Clone, Debug, Default)]
25pub struct ComputeModelLib {
26    profile: ModeledComputeProfile,
27}
28
29impl ComputeModelLib {
30    /// Builds a modeled compute library from a profile.
31    pub fn new(profile: ModeledComputeProfile) -> Self {
32        Self { profile }
33    }
34}
35
36impl Lib for ComputeModelLib {
37    fn manifest(&self) -> LibManifest {
38        LibManifest {
39            id: compute_model_lib_symbol(),
40            version: Version(env!("CARGO_PKG_VERSION").to_owned()),
41            abi: AbiVersion { major: 0, minor: 1 },
42            target: LibTarget::HostRegistered,
43            requires: Vec::new(),
44            capabilities: Vec::new(),
45            exports: vec![Export::Site {
46                symbol: compute_model_site_symbol(),
47                runtime_id: None,
48            }],
49        }
50    }
51
52    fn load(&self, _cx: &mut sim_kernel::LoadCx, linker: &mut Linker<'_>) -> Result<()> {
53        let executor = Arc::new(ModeledTensorExecutor::new(self.profile.clone()));
54        let site = TensorSite::new(compute_model_site_symbol(), executor, Vec::new());
55        linker.site_value(
56            compute_model_site_symbol(),
57            DefaultFactory.opaque(Arc::new(site))?,
58        )?;
59        Ok(())
60    }
61}