Skip to content

[盗火者计划] 任务5 - JYH#38

Open
JYH1878 wants to merge 4 commits into
cipherflow-fhe:mainfrom
JYH1878:task5-rebase
Open

[盗火者计划] 任务5 - JYH#38
JYH1878 wants to merge 4 commits into
cipherflow-fhe:mainfrom
JYH1878:task5-rebase

Conversation

@JYH1878
Copy link
Copy Markdown

@JYH1878 JYH1878 commented May 7, 2026

任务概述

任务五:基于稀疏打包的 bootstrapping 算子优化

本 PR 在 lattisense C++ SDK 层暴露 lattigo 底层新增的 bootstrapping 参数预设 API,使上层框架和编译器可以按需选择 Sparse/Dense bootstrapping 参数。同时提供完整的 benchmark 文档和复现指南。

关联 PR

本 PR 依赖 lattigo 子模块的修改,见:cipherflow-fhe/lattigo#13

主要改动

1. C++ SDK 新增参数预设接口

文件 改动
fhe_ops_lib/fhe_lib_v2.h 新增 CkksBtpParameter::create_parameter_by_preset(int preset_id) 声明
fhe_ops_lib/fhe_lib_v2.cpp 实现上述方法,调用 Go SDK 的 CreateCkksBtpParameterByPreset

使用方式

// 旧接口:固定返回 Sparse0
auto param = fhe_ops_lib::CkksBtpParameter::create_parameter();

// 新接口:可选预设(0-3 Sparse, 4-7 Dense)
auto param_sparse = fhe_ops_lib::CkksBtpParameter::create_parameter_by_preset(0);
auto param_dense  = fhe_ops_lib::CkksBtpParameter::create_parameter_by_preset(4);

2. 子模块更新

  • fhe_ops_lib/lattigo 更新至包含 preset API 和 benchmark 测试的最新 commit
  • fhe_ops_lib/lattigo/go_sdk/liblattigo_sanitized.h 同步新增 CreateCkksBtpParameterByPreset 声明

3. 文档

  • 新增 README_task5.md:完整的技术文档、实验数据、复现命令、改动清单

编译验证

cmake -B build
cmake --build build -j$(nproc)

✅ C++ 项目全量编译通过(fhe_ops_lib / cxx_sdk_v2 / mega_ag_runners / unittests)

Go SDK 编译验证

cd fhe_ops_lib/lattigo/go_sdk
bash build.sh

liblattigo.a / liblattigo.so / liblattigo.h 全部更新成功

核心实验数据(引自 README_task5.md)

Sparse vs Dense Bootstrapping(LogN=16)

阶段 Dense (H=N/2) Sparse (H=192/H=32) 加速比
ModUp 1.45 s 0.30 s 4.8×
CtS 37.66 s 11.93 s 3.2×
EvalMod 9.47 s 5.84 s 1.6×
StC 12.43 s 3.37 s 3.7×
总时间 ~61.0 s ~21.4 s 2.85×

结论:Sparse SSE 相比 Dense 实现 2.85× 加速,并节省 4 个模数层级(可留给上层业务计算)。

复现方式

详见 README_task5.md,关键命令:

# C++ 编译
cmake -B build && cmake --build build -j$(nproc)

# Go 测试
cd fhe_ops_lib/lattigo/ckks/bootstrapping
go test -v -run TestPresetParameters -count=1
go test -v -run TestSparseVsDenseBSGS -count=1
go test -v -run TestSparseVsDenseFullParams -count=1

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant