zer_compute/backend/cpu/
device.rs1use std::sync::Arc;
2
3use zer_compare::{FellegiSunterScorer, FieldComparator};
4use zer_core::{
5 comparison::{ComparisonBatch, ComparisonVector},
6 record::Record,
7 record_pool::RecordPool,
8 schema::Schema,
9 scoring::{ModelParams, ScoredPair},
10 traits::{Comparator, Result as ZerResult, Scorer},
11};
12
13pub struct CpuDevice;
16
17#[derive(Clone)]
21pub struct CpuFallbackComparator {
22 inner: Arc<FieldComparator>,
23}
24
25impl CpuFallbackComparator {
26 pub fn from_schema(schema: &Schema) -> Self {
27 Self {
28 inner: Arc::new(FieldComparator::from_schema(schema)),
29 }
30 }
31}
32
33impl Comparator for CpuFallbackComparator {
34 fn compare(&self, a: &Record, b: &Record, schema: &Schema) -> ComparisonVector {
35 self.inner.compare(a, b, schema)
36 }
37
38 fn compare_batch_from_pool(
39 &self,
40 pool: &RecordPool,
41 indices: &[(usize, usize)],
42 schema: &Schema,
43 ) -> ComparisonBatch {
44 self.inner.compare_batch_from_pool(pool, indices, schema)
45 }
46}
47
48#[derive(Clone)]
52pub struct CpuFallbackScorer;
53
54impl Scorer for CpuFallbackScorer {
55 fn score(&self, vector: &ComparisonVector, params: &ModelParams) -> ScoredPair {
56 FellegiSunterScorer.score(vector, params)
57 }
58
59 fn score_batch(&self, batch: &ComparisonBatch, params: &ModelParams) -> Vec<ScoredPair> {
60 FellegiSunterScorer.score_batch(batch, params)
61 }
62
63 fn estimate_params(
64 &self,
65 batch: &ComparisonBatch,
66 init: Option<ModelParams>,
67 max_iter: usize,
68 ) -> ZerResult<ModelParams> {
69 FellegiSunterScorer.estimate_params(batch, init, max_iter)
70 }
71}
72
73pub fn cpu_estimate_params(
75 batch: &ComparisonBatch,
76 init: Option<ModelParams>,
77 max_iter: usize,
78) -> ZerResult<ModelParams> {
79 zer_compare::run_em(batch, init, max_iter)
80}