diff --git a/compiler/concrete-optimizer b/compiler/concrete-optimizer index f19becac2..20833cefa 160000 --- a/compiler/concrete-optimizer +++ b/compiler/concrete-optimizer @@ -1 +1 @@ -Subproject commit f19becac21ebf9a0387c6d59287d3a59c72cef41 +Subproject commit 20833cefac32b14ab409a6588593573e42839bc1 diff --git a/compiler/include/concretelang/Support/V0Parameters.h b/compiler/include/concretelang/Support/V0Parameters.h index 3e810942e..78b3ca0a2 100644 --- a/compiler/include/concretelang/Support/V0Parameters.h +++ b/compiler/include/concretelang/Support/V0Parameters.h @@ -24,6 +24,8 @@ constexpr uint DEFAULT_FALLBACK_LOG_NORM_WOPPBS = 8; constexpr bool DEFAULT_DISPLAY = false; constexpr bool DEFAULT_STRATEGY_V0 = false; constexpr bool DEFAULT_USE_GPU_CONSTRAINTS = false; +constexpr concrete_optimizer::Encoding DEFAULT_ENCODING = + concrete_optimizer::Encoding::Auto; struct Config { double p_error; @@ -33,15 +35,19 @@ struct Config { std::uint64_t security; double fallback_log_norm_woppbs; bool use_gpu_constraints; + concrete_optimizer::Encoding encoding; }; -constexpr Config DEFAULT_CONFIG = {UNSPECIFIED_P_ERROR, - NO_GLOBAL_P_ERROR, - DEFAULT_DISPLAY, - DEFAULT_STRATEGY_V0, - DEFAULT_SECURITY, - DEFAULT_FALLBACK_LOG_NORM_WOPPBS, - DEFAULT_USE_GPU_CONSTRAINTS}; +constexpr Config DEFAULT_CONFIG = { + UNSPECIFIED_P_ERROR, + NO_GLOBAL_P_ERROR, + DEFAULT_DISPLAY, + DEFAULT_STRATEGY_V0, + DEFAULT_SECURITY, + DEFAULT_FALLBACK_LOG_NORM_WOPPBS, + DEFAULT_USE_GPU_CONSTRAINTS, + DEFAULT_ENCODING, +}; using Dag = rust::Box; using Solution = concrete_optimizer::v0::Solution; diff --git a/compiler/lib/Support/V0Parameters.cpp b/compiler/lib/Support/V0Parameters.cpp index e96fce324..1245ec419 100644 --- a/compiler/lib/Support/V0Parameters.cpp +++ b/compiler/lib/Support/V0Parameters.cpp @@ -24,11 +24,13 @@ namespace mlir { namespace concretelang { concrete_optimizer::Options options_from_config(optimizer::Config config) { - concrete_optimizer::Options options; - options.security_level = config.security; - options.maximum_acceptable_error_probability = config.p_error; - options.default_log_norm2_woppbs = config.fallback_log_norm_woppbs; - options.use_gpu_constraints = config.use_gpu_constraints; + concrete_optimizer::Options options = { + /* .security_level = */ config.security, + /* .maximum_acceptable_error_probability = */ config.p_error, + /* .default_log_norm2_woppbs = */ config.fallback_log_norm_woppbs, + /* .use_gpu_constraints = */ config.use_gpu_constraints, + /* .encoding = */ config.encoding, + }; return options; } diff --git a/compiler/src/main.cpp b/compiler/src/main.cpp index 4dfbe16ba..f92af6ca9 100644 --- a/compiler/src/main.cpp +++ b/compiler/src/main.cpp @@ -223,6 +223,16 @@ llvm::cl::opt fallbackLogNormWoppbs( llvm::cl::init(mlir::concretelang::optimizer::DEFAULT_CONFIG .fallback_log_norm_woppbs)); +llvm::cl::opt optimizerEncoding( + "force-encoding", llvm::cl::desc("Choose cyphertext encoding."), + llvm::cl::init(mlir::concretelang::optimizer::DEFAULT_CONFIG.encoding), + llvm::cl::values(clEnumValN(concrete_optimizer::Encoding::Auto, "auto", + "Pick the best [default]")), + llvm::cl::values(clEnumValN(concrete_optimizer::Encoding::Native, "native", + "native")), + llvm::cl::values(clEnumValN(concrete_optimizer::Encoding::Native, "crt", + "Chineese Reminder Theorem representation"))); + llvm::cl::list fhelinalgTileSizes( "fhelinalg-tile-sizes", llvm::cl::desc( @@ -371,6 +381,7 @@ cmdlineCompilationOptions() { options.optimizerConfig.p_error = cmdline::pbsErrorProbability; options.optimizerConfig.display = cmdline::displayOptimizerChoice; options.optimizerConfig.strategy_v0 = cmdline::optimizerV0; + options.optimizerConfig.encoding = cmdline::optimizerEncoding; if (!std::isnan(options.optimizerConfig.global_p_error) && options.optimizerConfig.strategy_v0) {