mirror of
https://github.com/zama-ai/concrete.git
synced 2026-02-09 20:25:34 -05:00
feat: option to force optimization with a particular encoding
This commit is contained in:
@@ -18,11 +18,13 @@ const double WOP_FALLBACK_LOG_NORM = 8;
|
||||
const double NOISE_DEVIATION_COEFF = 1.0;
|
||||
|
||||
concrete_optimizer::Options default_options() {
|
||||
concrete_optimizer::Options options;
|
||||
options.security_level = SECURITY_128B;
|
||||
options.maximum_acceptable_error_probability = P_ERROR;
|
||||
options.use_gpu_constraints = false;
|
||||
return options;
|
||||
return concrete_optimizer::Options {
|
||||
.security_level = SECURITY_128B,
|
||||
.maximum_acceptable_error_probability = P_ERROR,
|
||||
.default_log_norm2_woppbs = WOP_FALLBACK_LOG_NORM,
|
||||
.use_gpu_constraints = false,
|
||||
.encoding = concrete_optimizer::Encoding::Auto
|
||||
};
|
||||
}
|
||||
|
||||
void test_v0() {
|
||||
@@ -48,8 +50,7 @@ void test_dag_no_lut() {
|
||||
rust::cxxbridge1::Box<concrete_optimizer::Weights> weights =
|
||||
concrete_optimizer::weights::vector(slice(weight_vec));
|
||||
|
||||
concrete_optimizer::dag::OperatorIndex node2 =
|
||||
dag->add_dot(slice(inputs), std::move(weights));
|
||||
dag->add_dot(slice(inputs), std::move(weights));
|
||||
|
||||
auto solution = dag->optimize_v0(default_options());
|
||||
assert(solution.glwe_polynomial_size == 256);
|
||||
@@ -64,8 +65,7 @@ void test_dag_lut() {
|
||||
dag->add_input(PRECISION_8B, slice(shape));
|
||||
|
||||
std::vector<u_int64_t> table = {};
|
||||
concrete_optimizer::dag::OperatorIndex node2 =
|
||||
dag->add_lut(input, slice(table), PRECISION_8B);
|
||||
dag->add_lut(input, slice(table), PRECISION_8B);
|
||||
|
||||
auto solution = dag->optimize(default_options());
|
||||
assert(solution.glwe_dimension == 1);
|
||||
@@ -82,8 +82,7 @@ void test_dag_lut_wop() {
|
||||
dag->add_input(PRECISION_16B, slice(shape));
|
||||
|
||||
std::vector<u_int64_t> table = {};
|
||||
concrete_optimizer::dag::OperatorIndex node2 =
|
||||
dag->add_lut(input, slice(table), PRECISION_16B);
|
||||
dag->add_lut(input, slice(table), PRECISION_16B);
|
||||
|
||||
auto solution = dag->optimize(default_options());
|
||||
assert(solution.glwe_dimension == 2);
|
||||
@@ -91,11 +90,29 @@ void test_dag_lut_wop() {
|
||||
assert(solution.use_wop_pbs);
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
void test_dag_lut_force_wop() {
|
||||
auto dag = concrete_optimizer::dag::empty();
|
||||
|
||||
std::vector<uint64_t> shape = {3};
|
||||
|
||||
concrete_optimizer::dag::OperatorIndex input =
|
||||
dag->add_input(PRECISION_8B, slice(shape));
|
||||
|
||||
std::vector<u_int64_t> table = {};
|
||||
dag->add_lut(input, slice(table), PRECISION_8B);
|
||||
|
||||
auto options = default_options();
|
||||
options.encoding = concrete_optimizer::Encoding::Crt;
|
||||
auto solution = dag->optimize(options);
|
||||
assert(solution.use_wop_pbs);
|
||||
}
|
||||
|
||||
int main() {
|
||||
test_v0();
|
||||
test_dag_no_lut();
|
||||
test_dag_lut();
|
||||
test_dag_lut_wop();
|
||||
test_dag_lut_force_wop();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user