From ca4159f123e95137ce5faa880ce2d1f84813a2f1 Mon Sep 17 00:00:00 2001 From: pgardratzama Date: Mon, 6 Oct 2025 17:17:55 +0200 Subject: [PATCH] fix(hpu): fix overflow flag of OVF_MUL & OVF_MULS, also update simulation HPU config --- .../config_store/sim/hpu_config.toml | 18 +++++++++++++----- .../tfhe-hpu-backend/src/fw/fw_impl/ilp.rs | 3 ++- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/backends/tfhe-hpu-backend/config_store/sim/hpu_config.toml b/backends/tfhe-hpu-backend/config_store/sim/hpu_config.toml index fa5f5ab8f..618d55bed 100644 --- a/backends/tfhe-hpu-backend/config_store/sim/hpu_config.toml +++ b/backends/tfhe-hpu-backend/config_store/sim/hpu_config.toml @@ -25,18 +25,26 @@ lut_mem = 256 lut_pc = {Hbm={pc=34}} - fw_size= 16777215 # i.e. 16 MiB + fw_size= 16777216 # i.e. 16 MiB fw_pc = {Ddr= {offset= 0x3900_0000}} # NB: Allocation must take place in the Discrete DDR bsk_pc = [ {Hbm={pc=8}}, + {Hbm={pc=10}}, {Hbm={pc=12}}, + {Hbm={pc=14}}, {Hbm={pc=24}}, + {Hbm={pc=26}}, {Hbm={pc=28}}, + {Hbm={pc=30}}, {Hbm={pc=40}}, + {Hbm={pc=42}}, {Hbm={pc=44}}, + {Hbm={pc=46}}, {Hbm={pc=56}}, - {Hbm={pc=60}} + {Hbm={pc=58}}, + {Hbm={pc=60}}, + {Hbm={pc=62}} ] ksk_pc = [ @@ -64,7 +72,7 @@ [firmware] implementation = "Llt" integer_w=[2,4,6,8,10,12,14,16,32,64,128] - min_batch_size = 11 + min_batch_size = 12 kogge_cfg = "${HPU_BACKEND_DIR}/config_store/${HPU_CONFIG}/kogge_cfg.toml" custom_iop.'IOP[0]' = "${HPU_BACKEND_DIR}/config_store/${HPU_CONFIG}/custom_iop/cust_0.asm" custom_iop.'IOP[1]' = "${HPU_BACKEND_DIR}/config_store/${HPU_CONFIG}/custom_iop/cust_1.asm" @@ -80,8 +88,8 @@ custom_iop.'IOP[21]' = "${HPU_BACKEND_DIR}/config_store/${HPU_CONFIG}/custom_iop/cust_21.asm" [firmware.op_cfg.default] - fill_batch_fifo = true - min_batch_size = false + fill_batch_fifo = false + min_batch_size = true use_tiers = false flush_behaviour = "Patient" flush = true diff --git a/backends/tfhe-hpu-backend/src/fw/fw_impl/ilp.rs b/backends/tfhe-hpu-backend/src/fw/fw_impl/ilp.rs index f978bf420..d2aa99adc 100644 --- a/backends/tfhe-hpu-backend/src/fw/fw_impl/ilp.rs +++ b/backends/tfhe-hpu-backend/src/fw/fw_impl/ilp.rs @@ -498,6 +498,7 @@ pub fn iop_mulx( // Wrapped required lookup table in MetaVar let pbs_msg = new_pbs!(prog, "MsgOnly"); let pbs_carry = new_pbs!(prog, "CarryInMsg"); + let pbs_carry_is_some = new_pbs!(prog, "CarryIsSome"); let pbs_mul_lsb = new_pbs!(prog, "MultCarryMsgLsb"); let pbs_mul_msb = new_pbs!(prog, "MultCarryMsgMsb"); let pbs_mult_is_some = new_pbs!(prog, "MultCarryMsgIsSome"); @@ -691,7 +692,7 @@ pub fn iop_mulx( pp_vars.push_back((w + 1, msb)); } else if flag.is_some() { // Last carry must be extracted for overflow computation - let ovf_lsb_nz = var.pbs(&pbs_mult_msb_is_some, false); + let ovf_lsb_nz = var.pbs(&pbs_carry_is_some, false); ovf_non_zero_vars.push(ovf_lsb_nz); } }