feat: option to force cyphertext encoding

This commit is contained in:
rudy
2022-12-02 16:17:35 +01:00
committed by rudy-6-4
parent d7be50bb53
commit 5516a55c1c
4 changed files with 32 additions and 13 deletions

View File

@@ -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<concrete_optimizer::OperationDag>;
using Solution = concrete_optimizer::v0::Solution;

View File

@@ -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;
}

View File

@@ -223,6 +223,16 @@ llvm::cl::opt<double> fallbackLogNormWoppbs(
llvm::cl::init(mlir::concretelang::optimizer::DEFAULT_CONFIG
.fallback_log_norm_woppbs));
llvm::cl::opt<concrete_optimizer::Encoding> 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<int64_t> 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) {