Skip to content

Commit de83ba4

Browse files
author
Matthijs van Otterdijk
committed
reformat
1 parent 04b0760 commit de83ba4

File tree

4 files changed

+60
-35
lines changed

4 files changed

+60
-35
lines changed

benches/distance.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@ fn bench_cpu_distance(b: &mut Bencher) {
1717

1818
#[cfg(feature = "simd")]
1919
mod simd_benches {
20-
use terminusdb_semantic_indexer::vecmath::*;
21-
use terminusdb_semantic_indexer::vecmath::simd::*;
2220
use rand::{rngs::StdRng, SeedableRng};
21+
use terminusdb_semantic_indexer::vecmath::simd::*;
22+
use terminusdb_semantic_indexer::vecmath::*;
2323
use test::Bencher;
2424

2525
#[bench]

src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
pub mod indexer;
22
pub mod openai;
33
pub mod server;
4-
pub mod vectors;
54
pub mod vecmath;
5+
pub mod vectors;

src/vecmath.rs

Lines changed: 56 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,16 @@ fn clamp_01(f: f32) -> f32 {
3636
}
3737

3838
fn normalize_cosine_distance(f: f32) -> f32 {
39-
clamp_01((f-1.0)/-2.0)
39+
clamp_01((f - 1.0) / -2.0)
4040
}
4141

42-
4342
pub fn normalized_cosine_distance_cpu(left: &Embedding, right: &Embedding) -> f32 {
44-
normalize_cosine_distance(left.iter().zip(right.iter()).map(|(l,r)|l*r).sum::<f32>())
43+
normalize_cosine_distance(
44+
left.iter()
45+
.zip(right.iter())
46+
.map(|(l, r)| l * r)
47+
.sum::<f32>(),
48+
)
4549
}
4650

4751
#[cfg(feature = "simd")]
@@ -57,7 +61,7 @@ pub fn normalized_cosine_distance_simd(left: &Embedding, right: &Embedding) -> f
5761
pub fn normalize_vec_cpu(vec: &mut Embedding) {
5862
let mut sum = 0.0;
5963
for f in vec.iter() {
60-
sum += f*f;
64+
sum += f * f;
6165
}
6266
let magnitude = sum.sqrt();
6367
//eprintln!("cpu magnitude: {}", magnitude);
@@ -89,9 +93,9 @@ pub fn normalize_vec(vec: &mut Embedding) {
8993

9094
#[cfg(feature = "simd")]
9195
pub mod simd {
92-
use packed_simd::f32x16;
93-
use aligned_box::AlignedBox;
9496
use super::*;
97+
use aligned_box::AlignedBox;
98+
use packed_simd::f32x16;
9599

96100
pub fn aligned_box(e: Embedding) -> AlignedBox<Embedding> {
97101
AlignedBox::new(std::mem::align_of::<f32x16>(), e).unwrap()
@@ -115,12 +119,15 @@ pub mod simd {
115119
}
116120
}
117121

118-
pub unsafe fn normalized_cosine_distance_simd_aligned_unchecked(left: &Embedding, right: &Embedding) -> f32 {
122+
pub unsafe fn normalized_cosine_distance_simd_aligned_unchecked(
123+
left: &Embedding,
124+
right: &Embedding,
125+
) -> f32 {
119126
//eprintln!("using {} ({} lanes)", stringify!(f32x16), 16);
120127
let mut sum = <f32x16>::splat(0.);
121-
for x in 0..left.len()/16 {
122-
let l = <f32x16>::from_slice_aligned_unchecked(&left[x*16..(x+1)*16]);
123-
let r = <f32x16>::from_slice_aligned_unchecked(&right[x*16..(x+1)*16]);
128+
for x in 0..left.len() / 16 {
129+
let l = <f32x16>::from_slice_aligned_unchecked(&left[x * 16..(x + 1) * 16]);
130+
let r = <f32x16>::from_slice_aligned_unchecked(&right[x * 16..(x + 1) * 16]);
124131
sum += l * r;
125132
}
126133
normalize_cosine_distance(sum.sum())
@@ -130,26 +137,27 @@ pub mod simd {
130137
//eprintln!("using {} ({} lanes)", stringify!(f32x16), 16);
131138
let mut sum = <f32x16>::splat(0.);
132139
let exp = <f32x16>::splat(2.);
133-
for x in 0..vec.len()/16 {
134-
let part = <f32x16>::from_slice_aligned_unchecked(&vec[x*16..(x+1)*16]);
135-
sum += part*part;
140+
for x in 0..vec.len() / 16 {
141+
let part = <f32x16>::from_slice_aligned_unchecked(&vec[x * 16..(x + 1) * 16]);
142+
sum += part * part;
136143
}
137144
let magnitude = sum.sum().sqrt();
138145
//eprintln!("simd magnitude: {}", magnitude);
139146
let magnitude = <f32x16>::splat(magnitude);
140147

141-
for x in 0..vec.len()/16 {
142-
let scaled = <f32x16>::from_slice_aligned_unchecked(&vec[x*16..(x+1)*16]) / magnitude;
143-
scaled.write_to_slice_aligned_unchecked(&mut vec[x*16..(x+1)*16]);
148+
for x in 0..vec.len() / 16 {
149+
let scaled =
150+
<f32x16>::from_slice_aligned_unchecked(&vec[x * 16..(x + 1) * 16]) / magnitude;
151+
scaled.write_to_slice_aligned_unchecked(&mut vec[x * 16..(x + 1) * 16]);
144152
}
145153
}
146154

147155
pub fn normalized_cosine_distance_simd_unaligned(left: &Embedding, right: &Embedding) -> f32 {
148156
//eprintln!("using {} ({} lanes, unaligned)", stringify!(f32x16), 16);
149157
let mut sum = <f32x16>::splat(0.);
150-
for x in 0..left.len()/16 {
151-
let l = <f32x16>::from_slice_unaligned(&left[x*16..(x+1)*16]);
152-
let r = <f32x16>::from_slice_unaligned(&right[x*16..(x+1)*16]);
158+
for x in 0..left.len() / 16 {
159+
let l = <f32x16>::from_slice_unaligned(&left[x * 16..(x + 1) * 16]);
160+
let r = <f32x16>::from_slice_unaligned(&right[x * 16..(x + 1) * 16]);
153161
sum += l * r;
154162
}
155163
normalize_cosine_distance(sum.sum())
@@ -159,17 +167,17 @@ pub mod simd {
159167
//eprintln!("using {} ({} lanes, unaligned)", stringify!(f32x16), 16);
160168
let mut sum = <f32x16>::splat(0.);
161169
//let exp = <f32x16>::splat(2.);
162-
for x in 0..vec.len()/16 {
163-
let part = <f32x16>::from_slice_unaligned(&vec[x*16..(x+1)*16]);
164-
sum += part*part;
170+
for x in 0..vec.len() / 16 {
171+
let part = <f32x16>::from_slice_unaligned(&vec[x * 16..(x + 1) * 16]);
172+
sum += part * part;
165173
}
166174
let magnitude = sum.sum().sqrt();
167175
//eprintln!("simd magnitude: {}", magnitude);
168176
let magnitude = <f32x16>::splat(magnitude);
169177

170-
for x in 0..vec.len()/16 {
171-
let scaled = <f32x16>::from_slice_unaligned(&vec[x*16..(x+1)*16]) / magnitude;
172-
scaled.write_to_slice_unaligned(&mut vec[x*16..(x+1)*16]);
178+
for x in 0..vec.len() / 16 {
179+
let scaled = <f32x16>::from_slice_unaligned(&vec[x * 16..(x + 1) * 16]) / magnitude;
180+
scaled.write_to_slice_unaligned(&mut vec[x * 16..(x + 1) * 16]);
173181
}
174182
}
175183
}
@@ -178,7 +186,9 @@ pub mod simd {
178186
mod tests {
179187
use rand::{rngs::StdRng, SeedableRng};
180188

181-
use crate::vecmath::simd::{normalize_vec_simd_unaligned, normalized_cosine_distance_simd_unaligned};
189+
use crate::vecmath::simd::{
190+
normalize_vec_simd_unaligned, normalized_cosine_distance_simd_unaligned,
191+
};
182192

183193
use super::*;
184194
#[test]
@@ -194,14 +204,29 @@ mod tests {
194204
normalize_vec_cpu(&mut e1);
195205
normalize_vec_simd_unaligned(&mut e2);
196206

197-
eprintln!("distance (cpu): {}", normalized_cosine_distance_cpu(&e1, &e2));
198-
eprintln!("distance (simd): {}", normalized_cosine_distance_simd_unaligned(&e1, &e2));
199-
eprintln!("distance (simd same): {}", normalized_cosine_distance_simd_unaligned(&e1, &e1));
207+
eprintln!(
208+
"distance (cpu): {}",
209+
normalized_cosine_distance_cpu(&e1, &e2)
210+
);
211+
eprintln!(
212+
"distance (simd): {}",
213+
normalized_cosine_distance_simd_unaligned(&e1, &e2)
214+
);
215+
eprintln!(
216+
"distance (simd same): {}",
217+
normalized_cosine_distance_simd_unaligned(&e1, &e1)
218+
);
200219

201220
let mut e3 = random_embedding(&mut rng);
202221
normalize_vec_cpu(&mut e3);
203-
eprintln!("distance (cpu): {}", normalized_cosine_distance_cpu(&e1, &e3));
204-
eprintln!("distance (simd): {}", normalized_cosine_distance_simd_unaligned(&e1, &e3));
222+
eprintln!(
223+
"distance (cpu): {}",
224+
normalized_cosine_distance_cpu(&e1, &e3)
225+
);
226+
eprintln!(
227+
"distance (simd): {}",
228+
normalized_cosine_distance_simd_unaligned(&e1, &e3)
229+
);
205230

206231
assert_eq!(e1, e2);
207232
}

src/vectors.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ use std::sync::{Arc, Condvar, Mutex, RwLock, Weak};
1515
use lru::LruCache;
1616
use urlencoding::encode;
1717

18-
use crate::vecmath::{EMBEDDING_LENGTH, EMBEDDING_BYTE_LENGTH, Embedding, EmbeddingBytes};
18+
use crate::vecmath::{Embedding, EmbeddingBytes, EMBEDDING_BYTE_LENGTH, EMBEDDING_LENGTH};
1919

2020
// 3 memory pages of 4K hold 2 OpenAI vectors.
2121
// We set things up so that blocks are some multiple of 2 pages.

0 commit comments

Comments
 (0)