scirs2_linalg/simd_ops/neural/
patterns.rs1use super::types::*;
4use scirs2_core::ndarray::Array2;
5use std::collections::HashMap;
6
7#[derive(Debug)]
9#[allow(dead_code)]
10pub struct PatternDatabase<T> {
11 patterns: HashMap<PatternId, MemoryAccessPattern<T>>,
13 similarity_index: PatternSimilarityIndex,
15 frequency_counter: HashMap<PatternId, usize>,
17 performance_mapping: HashMap<PatternId, f64>,
19}
20
21#[derive(Debug)]
23#[allow(dead_code)]
24pub struct PatternSimilarityIndex {
25 lsh_index: LocalitySensitiveHashing,
27 similarity_threshold: f64,
29 index_params: IndexParameters,
31}
32
33#[derive(Debug)]
35#[allow(dead_code)]
36pub struct LocalitySensitiveHashing {
37 hash_functions: Vec<HashFunction>,
39 hash_tables: Vec<HashMap<u64, Vec<PatternId>>>,
41 dimension: usize,
43}
44
45#[derive(Debug)]
47pub struct HashFunction {
48 pub projection: Array2<f64>,
50 pub bias: f64,
52 pub bucket_width: f64,
54}
55
56#[derive(Debug, Clone)]
58pub struct IndexParameters {
59 pub num_hash_functions: usize,
61 pub num_hash_tables: usize,
63 pub bucket_width: f64,
65 pub dimension_reduction: Option<usize>,
67}
68
69#[derive(Debug, Clone)]
71pub struct MemoryAccessPattern<T> {
72 pub id: PatternId,
74 pub access_sequence: Vec<MemoryAccess>,
76 pub features: PatternFeatures,
78 pub context: AccessContext<T>,
80 pub performance: PatternPerformance,
82}
83
84#[derive(Debug, Clone)]
86pub struct MemoryAccess {
87 pub address: usize,
89 pub size: usize,
91 pub access_type: MemoryAccessType,
93 pub timestamp: u64,
95 pub thread_id: usize,
97}
98
99#[derive(Debug, Clone)]
101pub struct PatternFeatures {
102 pub spatial_locality: f64,
104 pub temporal_locality: f64,
106 pub stride_pattern: Vec<isize>,
108 pub access_density: f64,
110 pub repetition_factor: f64,
112 pub working_setsize: usize,
114 pub cache_utilization: f64,
116}
117
118#[derive(Debug, Clone)]
120pub struct PatternPerformance {
121 pub average_latency: f64,
123 pub bandwidth_utilization: f64,
125 pub cache_hit_rate: f64,
127 pub energy_efficiency: f64,
129 pub scalability_factor: f64,
131}
132
133impl<T> Default for PatternDatabase<T> {
135 fn default() -> Self {
136 Self::new()
137 }
138}
139
140impl<T> PatternDatabase<T> {
141 pub fn new() -> Self {
142 Self {
143 patterns: HashMap::new(),
144 similarity_index: PatternSimilarityIndex::new(),
145 frequency_counter: HashMap::new(),
146 performance_mapping: HashMap::new(),
147 }
148 }
149}
150
151impl Default for PatternSimilarityIndex {
152 fn default() -> Self {
153 Self::new()
154 }
155}
156
157impl PatternSimilarityIndex {
158 pub fn new() -> Self {
159 Self {
160 lsh_index: LocalitySensitiveHashing::new(),
161 similarity_threshold: 0.8,
162 index_params: IndexParameters::default(),
163 }
164 }
165}
166
167impl Default for LocalitySensitiveHashing {
168 fn default() -> Self {
169 Self::new()
170 }
171}
172
173impl LocalitySensitiveHashing {
174 pub fn new() -> Self {
175 Self {
176 hash_functions: Vec::new(),
177 hash_tables: Vec::new(),
178 dimension: 128,
179 }
180 }
181}
182
183impl Default for IndexParameters {
184 fn default() -> Self {
185 Self {
186 num_hash_functions: 10,
187 num_hash_tables: 5,
188 bucket_width: 1.0,
189 dimension_reduction: Some(64),
190 }
191 }
192}