From 3529c344d0b11d25e4dc21d45dac94fa24e82842 Mon Sep 17 00:00:00 2001 From: FiveMovesAhead Date: Thu, 16 Jan 2025 21:06:14 +0000 Subject: [PATCH] Compiled vector_search/brute_force_bacalhau --- .../benchmarker_outbound.rs | 113 ++++++++++++++++++ .../brute_force_bacalhau/commercial.rs | 113 ++++++++++++++++++ .../brute_force_bacalhau/inbound.rs | 113 ++++++++++++++++++ .../innovator_outbound.rs | 113 ++++++++++++++++++ .../vector_search/brute_force_bacalhau/mod.rs | 4 + .../brute_force_bacalhau/open_data.rs | 113 ++++++++++++++++++ tig-algorithms/src/vector_search/mod.rs | 3 +- tig-algorithms/src/vector_search/template.rs | 26 +--- .../vector_search/brute_force_bacalhau.wasm | Bin 0 -> 125121 bytes 9 files changed, 573 insertions(+), 25 deletions(-) create mode 100644 tig-algorithms/src/vector_search/brute_force_bacalhau/benchmarker_outbound.rs create mode 100644 tig-algorithms/src/vector_search/brute_force_bacalhau/commercial.rs create mode 100644 tig-algorithms/src/vector_search/brute_force_bacalhau/inbound.rs create mode 100644 tig-algorithms/src/vector_search/brute_force_bacalhau/innovator_outbound.rs create mode 100644 tig-algorithms/src/vector_search/brute_force_bacalhau/mod.rs create mode 100644 tig-algorithms/src/vector_search/brute_force_bacalhau/open_data.rs create mode 100644 tig-algorithms/wasm/vector_search/brute_force_bacalhau.wasm diff --git a/tig-algorithms/src/vector_search/brute_force_bacalhau/benchmarker_outbound.rs b/tig-algorithms/src/vector_search/brute_force_bacalhau/benchmarker_outbound.rs new file mode 100644 index 00000000..8a58f5cb --- /dev/null +++ b/tig-algorithms/src/vector_search/brute_force_bacalhau/benchmarker_outbound.rs @@ -0,0 +1,113 @@ +/*! +Copyright 2024 Louis Silva + +Licensed under the TIG Benchmarker Outbound Game License v1.0 (the "License"); you +may not use this file except in compliance with the License. You may obtain a copy +of the License at + +https://github.com/tig-foundation/tig-monorepo/tree/main/docs/licenses + +Unless required by applicable law or agreed to in writing, software distributed +under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR +CONDITIONS OF ANY KIND, either express or implied. See the License for the specific +language governing permissions and limitations under the License. + */ + +use anyhow::Result; + +use tig_challenges::vector_search::*; + +#[inline] +fn l2_norm(x: &[f32]) -> f32 { + x.iter().map(|&val| val * val).sum::().sqrt() +} + +#[inline] +fn euclidean_distance_with_precomputed_norm( + a_norm_sq: f32, + b_norm_sq: f32, + ab_dot_product: f32 +) -> f32 { + (a_norm_sq + b_norm_sq - 2.0 * ab_dot_product).sqrt() +} + +pub fn solve_challenge(challenge: &Challenge) -> Result> { + let vector_database: &Vec> = &challenge.vector_database; + let query_vectors: &Vec> = &challenge.query_vectors; + let max_distance: f32 = challenge.max_distance; + + let mut indexes: Vec = Vec::with_capacity(query_vectors.len()); + let mut vector_norms_sq: Vec = Vec::with_capacity(vector_database.len()); + + let mut sum_norms_sq: f32 = 0.0; + let mut sum_squares: f32 = 0.0; + + for vector in vector_database { + let norm_sq: f32 = vector.iter().map(|&val| val * val).sum(); + sum_norms_sq += norm_sq.sqrt(); + sum_squares += norm_sq; + vector_norms_sq.push(norm_sq); + } + + let vector_norms_len: f32 = vector_norms_sq.len() as f32; + let std_dev: f32 = ((sum_squares / vector_norms_len) - (sum_norms_sq / vector_norms_len).powi(2)).sqrt(); + let norm_threshold: f32 = 2.0 * std_dev; + + for query in query_vectors { + let query_norm_sq: f32 = query.iter().map(|&val| val * val).sum(); + + let mut closest_index: Option = None; + let mut closest_distance: f32 = f32::MAX; + + for (idx, vector) in vector_database.iter().enumerate() { + let vector_norm_sq = vector_norms_sq[idx]; + if ((vector_norm_sq.sqrt() - query_norm_sq.sqrt()).abs()) > norm_threshold { + continue; + } + + let ab_dot_product: f32 = query.iter().zip(vector).map(|(&x1, &x2)| x1 * x2).sum(); + let distance: f32 = euclidean_distance_with_precomputed_norm( + query_norm_sq, + vector_norm_sq, + ab_dot_product, + ); + + if distance <= max_distance { + closest_index = Some(idx); + break; // Early exit + } else if distance < closest_distance { + closest_index = Some(idx); + closest_distance = distance; + } + } + + if let Some(index) = closest_index { + indexes.push(index); + } else { + return Ok(None); + } + } + + Ok(Some(Solution { indexes })) +} +#[cfg(feature = "cuda")] +mod gpu_optimisation { + use super::*; + use cudarc::driver::*; + use std::{collections::HashMap, sync::Arc}; + use tig_challenges::CudaKernel; + + // set KERNEL to None if algorithm only has a CPU implementation + pub const KERNEL: Option = None; + + // Important! your GPU and CPU version of the algorithm should return the same result + pub fn cuda_solve_challenge( + challenge: &Challenge, + dev: &Arc, + mut funcs: HashMap<&'static str, CudaFunction>, + ) -> anyhow::Result> { + solve_challenge(challenge) + } +} +#[cfg(feature = "cuda")] +pub use gpu_optimisation::{cuda_solve_challenge, KERNEL}; diff --git a/tig-algorithms/src/vector_search/brute_force_bacalhau/commercial.rs b/tig-algorithms/src/vector_search/brute_force_bacalhau/commercial.rs new file mode 100644 index 00000000..bacee69c --- /dev/null +++ b/tig-algorithms/src/vector_search/brute_force_bacalhau/commercial.rs @@ -0,0 +1,113 @@ +/*! +Copyright 2024 Louis Silva + +Licensed under the TIG Commercial License v1.0 (the "License"); you +may not use this file except in compliance with the License. You may obtain a copy +of the License at + +https://github.com/tig-foundation/tig-monorepo/tree/main/docs/licenses + +Unless required by applicable law or agreed to in writing, software distributed +under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR +CONDITIONS OF ANY KIND, either express or implied. See the License for the specific +language governing permissions and limitations under the License. + */ + +use anyhow::Result; + +use tig_challenges::vector_search::*; + +#[inline] +fn l2_norm(x: &[f32]) -> f32 { + x.iter().map(|&val| val * val).sum::().sqrt() +} + +#[inline] +fn euclidean_distance_with_precomputed_norm( + a_norm_sq: f32, + b_norm_sq: f32, + ab_dot_product: f32 +) -> f32 { + (a_norm_sq + b_norm_sq - 2.0 * ab_dot_product).sqrt() +} + +pub fn solve_challenge(challenge: &Challenge) -> Result> { + let vector_database: &Vec> = &challenge.vector_database; + let query_vectors: &Vec> = &challenge.query_vectors; + let max_distance: f32 = challenge.max_distance; + + let mut indexes: Vec = Vec::with_capacity(query_vectors.len()); + let mut vector_norms_sq: Vec = Vec::with_capacity(vector_database.len()); + + let mut sum_norms_sq: f32 = 0.0; + let mut sum_squares: f32 = 0.0; + + for vector in vector_database { + let norm_sq: f32 = vector.iter().map(|&val| val * val).sum(); + sum_norms_sq += norm_sq.sqrt(); + sum_squares += norm_sq; + vector_norms_sq.push(norm_sq); + } + + let vector_norms_len: f32 = vector_norms_sq.len() as f32; + let std_dev: f32 = ((sum_squares / vector_norms_len) - (sum_norms_sq / vector_norms_len).powi(2)).sqrt(); + let norm_threshold: f32 = 2.0 * std_dev; + + for query in query_vectors { + let query_norm_sq: f32 = query.iter().map(|&val| val * val).sum(); + + let mut closest_index: Option = None; + let mut closest_distance: f32 = f32::MAX; + + for (idx, vector) in vector_database.iter().enumerate() { + let vector_norm_sq = vector_norms_sq[idx]; + if ((vector_norm_sq.sqrt() - query_norm_sq.sqrt()).abs()) > norm_threshold { + continue; + } + + let ab_dot_product: f32 = query.iter().zip(vector).map(|(&x1, &x2)| x1 * x2).sum(); + let distance: f32 = euclidean_distance_with_precomputed_norm( + query_norm_sq, + vector_norm_sq, + ab_dot_product, + ); + + if distance <= max_distance { + closest_index = Some(idx); + break; // Early exit + } else if distance < closest_distance { + closest_index = Some(idx); + closest_distance = distance; + } + } + + if let Some(index) = closest_index { + indexes.push(index); + } else { + return Ok(None); + } + } + + Ok(Some(Solution { indexes })) +} +#[cfg(feature = "cuda")] +mod gpu_optimisation { + use super::*; + use cudarc::driver::*; + use std::{collections::HashMap, sync::Arc}; + use tig_challenges::CudaKernel; + + // set KERNEL to None if algorithm only has a CPU implementation + pub const KERNEL: Option = None; + + // Important! your GPU and CPU version of the algorithm should return the same result + pub fn cuda_solve_challenge( + challenge: &Challenge, + dev: &Arc, + mut funcs: HashMap<&'static str, CudaFunction>, + ) -> anyhow::Result> { + solve_challenge(challenge) + } +} +#[cfg(feature = "cuda")] +pub use gpu_optimisation::{cuda_solve_challenge, KERNEL}; diff --git a/tig-algorithms/src/vector_search/brute_force_bacalhau/inbound.rs b/tig-algorithms/src/vector_search/brute_force_bacalhau/inbound.rs new file mode 100644 index 00000000..fd0bf1d3 --- /dev/null +++ b/tig-algorithms/src/vector_search/brute_force_bacalhau/inbound.rs @@ -0,0 +1,113 @@ +/*! +Copyright 2024 Louis Silva + +Licensed under the TIG Inbound Game License v1.0 or (at your option) any later +version (the "License"); you may not use this file except in compliance with the +License. You may obtain a copy of the License at + +https://github.com/tig-foundation/tig-monorepo/tree/main/docs/licenses + +Unless required by applicable law or agreed to in writing, software distributed +under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR +CONDITIONS OF ANY KIND, either express or implied. See the License for the specific +language governing permissions and limitations under the License. + */ + +use anyhow::Result; + +use tig_challenges::vector_search::*; + +#[inline] +fn l2_norm(x: &[f32]) -> f32 { + x.iter().map(|&val| val * val).sum::().sqrt() +} + +#[inline] +fn euclidean_distance_with_precomputed_norm( + a_norm_sq: f32, + b_norm_sq: f32, + ab_dot_product: f32 +) -> f32 { + (a_norm_sq + b_norm_sq - 2.0 * ab_dot_product).sqrt() +} + +pub fn solve_challenge(challenge: &Challenge) -> Result> { + let vector_database: &Vec> = &challenge.vector_database; + let query_vectors: &Vec> = &challenge.query_vectors; + let max_distance: f32 = challenge.max_distance; + + let mut indexes: Vec = Vec::with_capacity(query_vectors.len()); + let mut vector_norms_sq: Vec = Vec::with_capacity(vector_database.len()); + + let mut sum_norms_sq: f32 = 0.0; + let mut sum_squares: f32 = 0.0; + + for vector in vector_database { + let norm_sq: f32 = vector.iter().map(|&val| val * val).sum(); + sum_norms_sq += norm_sq.sqrt(); + sum_squares += norm_sq; + vector_norms_sq.push(norm_sq); + } + + let vector_norms_len: f32 = vector_norms_sq.len() as f32; + let std_dev: f32 = ((sum_squares / vector_norms_len) - (sum_norms_sq / vector_norms_len).powi(2)).sqrt(); + let norm_threshold: f32 = 2.0 * std_dev; + + for query in query_vectors { + let query_norm_sq: f32 = query.iter().map(|&val| val * val).sum(); + + let mut closest_index: Option = None; + let mut closest_distance: f32 = f32::MAX; + + for (idx, vector) in vector_database.iter().enumerate() { + let vector_norm_sq = vector_norms_sq[idx]; + if ((vector_norm_sq.sqrt() - query_norm_sq.sqrt()).abs()) > norm_threshold { + continue; + } + + let ab_dot_product: f32 = query.iter().zip(vector).map(|(&x1, &x2)| x1 * x2).sum(); + let distance: f32 = euclidean_distance_with_precomputed_norm( + query_norm_sq, + vector_norm_sq, + ab_dot_product, + ); + + if distance <= max_distance { + closest_index = Some(idx); + break; // Early exit + } else if distance < closest_distance { + closest_index = Some(idx); + closest_distance = distance; + } + } + + if let Some(index) = closest_index { + indexes.push(index); + } else { + return Ok(None); + } + } + + Ok(Some(Solution { indexes })) +} +#[cfg(feature = "cuda")] +mod gpu_optimisation { + use super::*; + use cudarc::driver::*; + use std::{collections::HashMap, sync::Arc}; + use tig_challenges::CudaKernel; + + // set KERNEL to None if algorithm only has a CPU implementation + pub const KERNEL: Option = None; + + // Important! your GPU and CPU version of the algorithm should return the same result + pub fn cuda_solve_challenge( + challenge: &Challenge, + dev: &Arc, + mut funcs: HashMap<&'static str, CudaFunction>, + ) -> anyhow::Result> { + solve_challenge(challenge) + } +} +#[cfg(feature = "cuda")] +pub use gpu_optimisation::{cuda_solve_challenge, KERNEL}; diff --git a/tig-algorithms/src/vector_search/brute_force_bacalhau/innovator_outbound.rs b/tig-algorithms/src/vector_search/brute_force_bacalhau/innovator_outbound.rs new file mode 100644 index 00000000..a0996b69 --- /dev/null +++ b/tig-algorithms/src/vector_search/brute_force_bacalhau/innovator_outbound.rs @@ -0,0 +1,113 @@ +/*! +Copyright 2024 Louis Silva + +Licensed under the TIG Innovator Outbound Game License v1.0 (the "License"); you +may not use this file except in compliance with the License. You may obtain a copy +of the License at + +https://github.com/tig-foundation/tig-monorepo/tree/main/docs/licenses + +Unless required by applicable law or agreed to in writing, software distributed +under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR +CONDITIONS OF ANY KIND, either express or implied. See the License for the specific +language governing permissions and limitations under the License. + */ + +use anyhow::Result; + +use tig_challenges::vector_search::*; + +#[inline] +fn l2_norm(x: &[f32]) -> f32 { + x.iter().map(|&val| val * val).sum::().sqrt() +} + +#[inline] +fn euclidean_distance_with_precomputed_norm( + a_norm_sq: f32, + b_norm_sq: f32, + ab_dot_product: f32 +) -> f32 { + (a_norm_sq + b_norm_sq - 2.0 * ab_dot_product).sqrt() +} + +pub fn solve_challenge(challenge: &Challenge) -> Result> { + let vector_database: &Vec> = &challenge.vector_database; + let query_vectors: &Vec> = &challenge.query_vectors; + let max_distance: f32 = challenge.max_distance; + + let mut indexes: Vec = Vec::with_capacity(query_vectors.len()); + let mut vector_norms_sq: Vec = Vec::with_capacity(vector_database.len()); + + let mut sum_norms_sq: f32 = 0.0; + let mut sum_squares: f32 = 0.0; + + for vector in vector_database { + let norm_sq: f32 = vector.iter().map(|&val| val * val).sum(); + sum_norms_sq += norm_sq.sqrt(); + sum_squares += norm_sq; + vector_norms_sq.push(norm_sq); + } + + let vector_norms_len: f32 = vector_norms_sq.len() as f32; + let std_dev: f32 = ((sum_squares / vector_norms_len) - (sum_norms_sq / vector_norms_len).powi(2)).sqrt(); + let norm_threshold: f32 = 2.0 * std_dev; + + for query in query_vectors { + let query_norm_sq: f32 = query.iter().map(|&val| val * val).sum(); + + let mut closest_index: Option = None; + let mut closest_distance: f32 = f32::MAX; + + for (idx, vector) in vector_database.iter().enumerate() { + let vector_norm_sq = vector_norms_sq[idx]; + if ((vector_norm_sq.sqrt() - query_norm_sq.sqrt()).abs()) > norm_threshold { + continue; + } + + let ab_dot_product: f32 = query.iter().zip(vector).map(|(&x1, &x2)| x1 * x2).sum(); + let distance: f32 = euclidean_distance_with_precomputed_norm( + query_norm_sq, + vector_norm_sq, + ab_dot_product, + ); + + if distance <= max_distance { + closest_index = Some(idx); + break; // Early exit + } else if distance < closest_distance { + closest_index = Some(idx); + closest_distance = distance; + } + } + + if let Some(index) = closest_index { + indexes.push(index); + } else { + return Ok(None); + } + } + + Ok(Some(Solution { indexes })) +} +#[cfg(feature = "cuda")] +mod gpu_optimisation { + use super::*; + use cudarc::driver::*; + use std::{collections::HashMap, sync::Arc}; + use tig_challenges::CudaKernel; + + // set KERNEL to None if algorithm only has a CPU implementation + pub const KERNEL: Option = None; + + // Important! your GPU and CPU version of the algorithm should return the same result + pub fn cuda_solve_challenge( + challenge: &Challenge, + dev: &Arc, + mut funcs: HashMap<&'static str, CudaFunction>, + ) -> anyhow::Result> { + solve_challenge(challenge) + } +} +#[cfg(feature = "cuda")] +pub use gpu_optimisation::{cuda_solve_challenge, KERNEL}; diff --git a/tig-algorithms/src/vector_search/brute_force_bacalhau/mod.rs b/tig-algorithms/src/vector_search/brute_force_bacalhau/mod.rs new file mode 100644 index 00000000..fcec9672 --- /dev/null +++ b/tig-algorithms/src/vector_search/brute_force_bacalhau/mod.rs @@ -0,0 +1,4 @@ +mod benchmarker_outbound; +pub use benchmarker_outbound::solve_challenge; +#[cfg(feature = "cuda")] +pub use benchmarker_outbound::{cuda_solve_challenge, KERNEL}; \ No newline at end of file diff --git a/tig-algorithms/src/vector_search/brute_force_bacalhau/open_data.rs b/tig-algorithms/src/vector_search/brute_force_bacalhau/open_data.rs new file mode 100644 index 00000000..c55800e4 --- /dev/null +++ b/tig-algorithms/src/vector_search/brute_force_bacalhau/open_data.rs @@ -0,0 +1,113 @@ +/*! +Copyright 2024 Louis Silva + +Licensed under the TIG Open Data License v1.0 or (at your option) any later version +(the "License"); you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +https://github.com/tig-foundation/tig-monorepo/tree/main/docs/licenses + +Unless required by applicable law or agreed to in writing, software distributed +under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR +CONDITIONS OF ANY KIND, either express or implied. See the License for the specific +language governing permissions and limitations under the License. + */ + +use anyhow::Result; + +use tig_challenges::vector_search::*; + +#[inline] +fn l2_norm(x: &[f32]) -> f32 { + x.iter().map(|&val| val * val).sum::().sqrt() +} + +#[inline] +fn euclidean_distance_with_precomputed_norm( + a_norm_sq: f32, + b_norm_sq: f32, + ab_dot_product: f32 +) -> f32 { + (a_norm_sq + b_norm_sq - 2.0 * ab_dot_product).sqrt() +} + +pub fn solve_challenge(challenge: &Challenge) -> Result> { + let vector_database: &Vec> = &challenge.vector_database; + let query_vectors: &Vec> = &challenge.query_vectors; + let max_distance: f32 = challenge.max_distance; + + let mut indexes: Vec = Vec::with_capacity(query_vectors.len()); + let mut vector_norms_sq: Vec = Vec::with_capacity(vector_database.len()); + + let mut sum_norms_sq: f32 = 0.0; + let mut sum_squares: f32 = 0.0; + + for vector in vector_database { + let norm_sq: f32 = vector.iter().map(|&val| val * val).sum(); + sum_norms_sq += norm_sq.sqrt(); + sum_squares += norm_sq; + vector_norms_sq.push(norm_sq); + } + + let vector_norms_len: f32 = vector_norms_sq.len() as f32; + let std_dev: f32 = ((sum_squares / vector_norms_len) - (sum_norms_sq / vector_norms_len).powi(2)).sqrt(); + let norm_threshold: f32 = 2.0 * std_dev; + + for query in query_vectors { + let query_norm_sq: f32 = query.iter().map(|&val| val * val).sum(); + + let mut closest_index: Option = None; + let mut closest_distance: f32 = f32::MAX; + + for (idx, vector) in vector_database.iter().enumerate() { + let vector_norm_sq = vector_norms_sq[idx]; + if ((vector_norm_sq.sqrt() - query_norm_sq.sqrt()).abs()) > norm_threshold { + continue; + } + + let ab_dot_product: f32 = query.iter().zip(vector).map(|(&x1, &x2)| x1 * x2).sum(); + let distance: f32 = euclidean_distance_with_precomputed_norm( + query_norm_sq, + vector_norm_sq, + ab_dot_product, + ); + + if distance <= max_distance { + closest_index = Some(idx); + break; // Early exit + } else if distance < closest_distance { + closest_index = Some(idx); + closest_distance = distance; + } + } + + if let Some(index) = closest_index { + indexes.push(index); + } else { + return Ok(None); + } + } + + Ok(Some(Solution { indexes })) +} +#[cfg(feature = "cuda")] +mod gpu_optimisation { + use super::*; + use cudarc::driver::*; + use std::{collections::HashMap, sync::Arc}; + use tig_challenges::CudaKernel; + + // set KERNEL to None if algorithm only has a CPU implementation + pub const KERNEL: Option = None; + + // Important! your GPU and CPU version of the algorithm should return the same result + pub fn cuda_solve_challenge( + challenge: &Challenge, + dev: &Arc, + mut funcs: HashMap<&'static str, CudaFunction>, + ) -> anyhow::Result> { + solve_challenge(challenge) + } +} +#[cfg(feature = "cuda")] +pub use gpu_optimisation::{cuda_solve_challenge, KERNEL}; diff --git a/tig-algorithms/src/vector_search/mod.rs b/tig-algorithms/src/vector_search/mod.rs index ae3472ac..4990304e 100644 --- a/tig-algorithms/src/vector_search/mod.rs +++ b/tig-algorithms/src/vector_search/mod.rs @@ -24,7 +24,8 @@ // c004_a013 -// c004_a014 +pub mod brute_force_bacalhau; +pub use brute_force_bacalhau as c004_a014; // c004_a015 diff --git a/tig-algorithms/src/vector_search/template.rs b/tig-algorithms/src/vector_search/template.rs index eddf8a0e..0f5fa1e2 100644 --- a/tig-algorithms/src/vector_search/template.rs +++ b/tig-algorithms/src/vector_search/template.rs @@ -1,11 +1,7 @@ /*! -Copyright [year copyright work created] [name of copyright owner] +Copyright [yyyy] [name of copyright owner] -Identity of Submitter [name of person or entity that submits the Work to TIG] - -UAI [UAI (if applicable)] - -Licensed under the TIG Inbound Game License v2.0 or (at your option) any later +Licensed under the TIG Inbound Game License v1.0 or (at your option) any later version (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at @@ -17,24 +13,6 @@ CONDITIONS OF ANY KIND, either express or implied. See the License for the speci language governing permissions and limitations under the License. */ -// REMOVE BELOW SECTION IF UNUSED -/* -REFERENCES AND ACKNOWLEDGMENTS - -This implementation is based on or inspired by existing work. Citations and -acknowledgments below: - -1. Academic Papers: - - [Author(s), "Paper Title", DOI (if available)] - -2. Code References: - - [Author(s), URL] - -3. Other: - - [Author(s), Details] - -*/ - // TIG's UI uses the pattern `tig_challenges::` to automatically detect your algorithm's challenge use anyhow::{anyhow, Result}; use tig_challenges::vector_search::{Challenge, Solution}; diff --git a/tig-algorithms/wasm/vector_search/brute_force_bacalhau.wasm b/tig-algorithms/wasm/vector_search/brute_force_bacalhau.wasm new file mode 100644 index 0000000000000000000000000000000000000000..9c34e1557e8df39838143d92a078300a6100dd96 GIT binary patch literal 125121 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 Cy6b!Z literal 0 HcmV?d00001