From 1b6c7a8efac031b2b7a965a67fff38a6f2f89c5f Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Wed, 4 Feb 2026 01:28:25 +0000 Subject: [PATCH] Optimize vector usage in Multiplicator setup Replaced `vec.append(&mut slice.to_vec())` with `vec.extend_from_slice(slice)` in `crates/fhe/src/bfv/ops/mul.rs`. This avoids allocating a temporary vector for the slice content before moving it to the destination vector. Measured performance impact: - Baseline: ~17.04 ms - Optimized: ~17.43 ms - Difference is within noise threshold, but the change avoids unnecessary allocation. Co-authored-by: tlepoint <1345502+tlepoint@users.noreply.github.com> --- crates/fhe/src/bfv/ops/mul.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/fhe/src/bfv/ops/mul.rs b/crates/fhe/src/bfv/ops/mul.rs index e473e192..7ca23722 100644 --- a/crates/fhe/src/bfv/ops/mul.rs +++ b/crates/fhe/src/bfv/ops/mul.rs @@ -107,7 +107,7 @@ impl Multiplicator { let n_moduli = (modulus_size + 60).div_ceil(62); let mut extended_basis = Vec::with_capacity(ctx.moduli().len() + n_moduli); - extended_basis.append(&mut ctx.moduli().to_vec()); + extended_basis.extend_from_slice(ctx.moduli()); let mut upper_bound = 1 << 62; while extended_basis.len() != ctx.moduli().len() + n_moduli { upper_bound = generate_prime(62, 2 * rk.ksk.par.degree() as u64, upper_bound).unwrap();