sim_lib_compute_model/
site.rs1use 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
13pub fn compute_model_lib_symbol() -> Symbol {
15 Symbol::qualified("compute", "model-lib")
16}
17
18pub fn compute_model_site_symbol() -> Symbol {
20 Symbol::new("site/compute/model")
21}
22
23#[derive(Clone, Debug, Default)]
25pub struct ComputeModelLib {
26 profile: ModeledComputeProfile,
27}
28
29impl ComputeModelLib {
30 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}