From 170ce8d725d76c23f323b11630311049ead37dfa Mon Sep 17 00:00:00 2001 From: rudy Date: Fri, 1 Jul 2022 11:28:57 +0200 Subject: [PATCH] fix(dag): tensorized lut are now counted as several lut --- .../src/optimization/dag/solo_key/analyze.rs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/concrete-optimizer/src/optimization/dag/solo_key/analyze.rs b/concrete-optimizer/src/optimization/dag/solo_key/analyze.rs index 203d10731..acab93398 100644 --- a/concrete-optimizer/src/optimization/dag/solo_key/analyze.rs +++ b/concrete-optimizer/src/optimization/dag/solo_key/analyze.rs @@ -349,6 +349,16 @@ fn levelled_complexity( levelled_complexity } +fn lut_count(dag: &unparametrized::OperationDag, out_shapes: &[Shape]) -> u64 { + let mut count = 0; + for (i, op) in dag.operators.iter().enumerate() { + if let Op::Lut { .. } = op { + count += out_shapes[i].flat_size(); + } + } + count +} + fn safe_noise_bound(precision: Precision, noise_config: &NoiseBoundConfig) -> f64 { error::safe_variance_bound_2padbits( precision as u64, @@ -419,7 +429,7 @@ pub fn analyze( let out_precisions = out_precisions(dag); let out_variances = out_variances(dag, &out_shapes); let in_luts_variance = in_luts_variance(dag, &out_precisions, &out_variances); - let nb_luts = in_luts_variance.len() as u64; + let nb_luts = lut_count(dag, &out_shapes); let extra_final_variances = extra_final_variances(dag, &out_precisions, &out_variances); let levelled_complexity = levelled_complexity(dag, &out_shapes); let constraints_by_precisions = constraints_by_precisions(