mirror of
https://github.com/zama-ai/tfhe-rs.git
synced 2026-01-07 22:04:10 -05:00
chore(csprng)!: remove generator_x86_64_aesni feature
BREAKING_CHANGE: - The `generator_x86_64_aesni` feature is no longer supported for tfhe-csprng
This commit is contained in:
committed by
Nicolas Sarlin
parent
3de23d14a2
commit
0f2451e3b7
@@ -25,24 +25,19 @@ clap = "=4.4.4"
|
||||
|
||||
[features]
|
||||
parallel = ["rayon"]
|
||||
generator_x86_64_aesni = []
|
||||
generator_fallback = []
|
||||
generator_aarch64_aes = []
|
||||
|
||||
x86_64 = [
|
||||
"parallel",
|
||||
"generator_x86_64_aesni",
|
||||
"generator_fallback",
|
||||
]
|
||||
x86_64 = ["parallel", "generator_fallback"]
|
||||
x86_64-unix = ["x86_64"]
|
||||
aarch64 = ["parallel", "generator_aarch64_aes", "generator_fallback"]
|
||||
aarch64-unix = ["aarch64"]
|
||||
software_prng = []
|
||||
|
||||
[[bench]]
|
||||
name = "benchmark"
|
||||
path = "benches/benchmark.rs"
|
||||
harness = false
|
||||
required-features = ["generator_x86_64_aesni"]
|
||||
|
||||
[[example]]
|
||||
name = "generate"
|
||||
|
||||
@@ -14,7 +14,7 @@ The crate also makes two seeders available, one needing the x86_64 instruction `
|
||||
|
||||
To execute the benchmarks on an x86_64 platform:
|
||||
```shell
|
||||
RUSTFLAGS="-Ctarget-cpu=native" cargo bench --features=generator_x86_64_aesni
|
||||
RUSTFLAGS="-Ctarget-cpu=native" cargo bench
|
||||
```
|
||||
|
||||
## License
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
use criterion::{black_box, criterion_group, criterion_main, Criterion};
|
||||
use tfhe_csprng::generators::{
|
||||
AesniRandomGenerator, BytesPerChild, ChildrenCount, RandomGenerator,
|
||||
};
|
||||
#[cfg(all(target_arch = "x86_64", target_feature = "aes"))]
|
||||
use tfhe_csprng::generators::AesniRandomGenerator as ActivatedRandomGenerator;
|
||||
#[cfg(not(all(target_arch = "x86_64", target_feature = "aes")))]
|
||||
use tfhe_csprng::generators::SoftwareRandomGenerator as ActivatedRandomGenerator;
|
||||
use tfhe_csprng::generators::{BytesPerChild, ChildrenCount, RandomGenerator};
|
||||
use tfhe_csprng::seeders::{RdseedSeeder, Seeder};
|
||||
|
||||
// The number of bytes to generate during one benchmark iteration.
|
||||
@@ -9,7 +11,7 @@ const N_GEN: usize = 1_000_000;
|
||||
|
||||
fn parent_generate(c: &mut Criterion) {
|
||||
let mut seeder = RdseedSeeder::new();
|
||||
let mut generator = AesniRandomGenerator::new(seeder.seed());
|
||||
let mut generator = ActivatedRandomGenerator::new(seeder.seed());
|
||||
c.bench_function("parent_generate", |b| {
|
||||
b.iter(|| {
|
||||
(0..N_GEN).for_each(|_| {
|
||||
@@ -21,7 +23,7 @@ fn parent_generate(c: &mut Criterion) {
|
||||
|
||||
fn child_generate(c: &mut Criterion) {
|
||||
let mut seeder = RdseedSeeder::new();
|
||||
let mut generator = AesniRandomGenerator::new(seeder.seed());
|
||||
let mut generator = ActivatedRandomGenerator::new(seeder.seed());
|
||||
let mut generator = generator
|
||||
.try_fork(ChildrenCount(1), BytesPerChild(N_GEN * 10_000))
|
||||
.unwrap()
|
||||
@@ -38,7 +40,7 @@ fn child_generate(c: &mut Criterion) {
|
||||
|
||||
fn fork(c: &mut Criterion) {
|
||||
let mut seeder = RdseedSeeder::new();
|
||||
let mut generator = AesniRandomGenerator::new(seeder.seed());
|
||||
let mut generator = ActivatedRandomGenerator::new(seeder.seed());
|
||||
c.bench_function("fork", |b| {
|
||||
b.iter(|| {
|
||||
black_box(
|
||||
|
||||
@@ -53,18 +53,11 @@ impl FeatureRequirement {
|
||||
|
||||
// const vecs are not yet a thing so use a fixed size array (update the array size when adding
|
||||
// requirements)
|
||||
static FEATURE_REQUIREMENTS: [FeatureRequirement; 2] = [
|
||||
FeatureRequirement {
|
||||
feature_name: "generator_x86_64_aesni",
|
||||
feature_req_target_arch: Some("x86_64"),
|
||||
feature_req_target_family: None,
|
||||
},
|
||||
FeatureRequirement {
|
||||
feature_name: "generator_aarch64_aes",
|
||||
feature_req_target_arch: Some("aarch64"),
|
||||
feature_req_target_family: None,
|
||||
},
|
||||
];
|
||||
static FEATURE_REQUIREMENTS: [FeatureRequirement; 1] = [FeatureRequirement {
|
||||
feature_name: "generator_aarch64_aes",
|
||||
feature_req_target_arch: Some("aarch64"),
|
||||
feature_req_target_family: None,
|
||||
}];
|
||||
|
||||
// For a "feature_name" feature_cfg!("feature_name") expands to
|
||||
// ("feature_name", cfg!(feature = "feature_name"))
|
||||
@@ -77,10 +70,7 @@ macro_rules! feature_cfg {
|
||||
// Static HashMap would require an additional crate (phf or lazy static e.g.), so we just write a
|
||||
// function that returns the HashMap we are interested in
|
||||
fn get_feature_enabled_status() -> HashMap<&'static str, bool> {
|
||||
HashMap::from([
|
||||
feature_cfg!("generator_x86_64_aesni"),
|
||||
feature_cfg!("generator_aarch64_aes"),
|
||||
])
|
||||
HashMap::from([feature_cfg!("generator_aarch64_aes")])
|
||||
}
|
||||
|
||||
// See https://stackoverflow.com/a/43435335/18088947 for the inspiration of this code
|
||||
|
||||
@@ -2,15 +2,22 @@
|
||||
//! the program stdout. It can also generate a fixed number of bytes by passing a value along the
|
||||
//! optional argument `--bytes_total`. For testing purpose.
|
||||
use clap::{value_parser, Arg, Command};
|
||||
#[cfg(feature = "generator_x86_64_aesni")]
|
||||
#[cfg(all(
|
||||
target_arch = "x86_64",
|
||||
target_feature = "aes",
|
||||
target_feature = "sse2"
|
||||
))]
|
||||
use tfhe_csprng::generators::AesniRandomGenerator as ActivatedRandomGenerator;
|
||||
#[cfg(feature = "generator_aarch64_aes")]
|
||||
use tfhe_csprng::generators::NeonAesRandomGenerator as ActivatedRandomGenerator;
|
||||
use tfhe_csprng::generators::RandomGenerator;
|
||||
#[cfg(all(
|
||||
not(feature = "generator_x86_64_aesni"),
|
||||
not(all(
|
||||
target_arch = "x86_64",
|
||||
target_feature = "aes",
|
||||
target_feature = "sse2"
|
||||
)),
|
||||
not(feature = "generator_aarch64_aes"),
|
||||
feature = "generator_fallback"
|
||||
))]
|
||||
use tfhe_csprng::generators::SoftwareRandomGenerator as ActivatedRandomGenerator;
|
||||
|
||||
|
||||
@@ -206,7 +206,6 @@ pub use index::*;
|
||||
|
||||
/// A module containing structures to manage table indices and buffer pointers together properly.
|
||||
mod states;
|
||||
pub use states::*;
|
||||
|
||||
/// A module containing an abstraction for aes block ciphers.
|
||||
mod block_cipher;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
use crate::generators::aes_ctr::{
|
||||
AesBlockCipher, AesCtrGenerator, ChildrenClosure, State, TableIndex,
|
||||
states::State, AesBlockCipher, AesCtrGenerator, ChildrenClosure, TableIndex,
|
||||
};
|
||||
use crate::generators::{BytesPerChild, ChildrenCount, ForkError};
|
||||
|
||||
|
||||
@@ -20,7 +20,8 @@ impl AesBlockCipher for AesniBlockCipher {
|
||||
if !(aes_detected && sse2_detected) {
|
||||
panic!(
|
||||
"The AesniBlockCipher requires both aes and sse2 x86 CPU features.\n\
|
||||
aes feature available: {}\nsse2 feature available: {}\n.",
|
||||
aes feature available: {}\nsse2 feature available: {}\n\
|
||||
Please consider enabling the SoftwareRandomGenerator with the `software_prng` feature",
|
||||
aes_detected, sse2_detected
|
||||
)
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#[cfg(feature = "generator_x86_64_aesni")]
|
||||
#[cfg(target_arch = "x86_64")]
|
||||
mod aesni;
|
||||
#[cfg(feature = "generator_x86_64_aesni")]
|
||||
#[cfg(target_arch = "x86_64")]
|
||||
pub use aesni::*;
|
||||
|
||||
#[cfg(feature = "generator_aarch64_aes")]
|
||||
@@ -8,7 +8,7 @@ mod aarch64;
|
||||
#[cfg(feature = "generator_aarch64_aes")]
|
||||
pub use aarch64::*;
|
||||
|
||||
#[cfg(feature = "generator_fallback")]
|
||||
#[cfg(feature = "software_prng")]
|
||||
mod soft;
|
||||
#[cfg(feature = "generator_fallback")]
|
||||
#[cfg(feature = "software_prng")]
|
||||
pub use soft::*;
|
||||
|
||||
@@ -129,10 +129,6 @@ parallel-wasm-api = ["dep:wasm-bindgen-rayon"]
|
||||
|
||||
nightly-avx512 = ["tfhe-fft/nightly", "tfhe-ntt/nightly", "pulp/nightly"]
|
||||
|
||||
# Enable the x86_64 specific accelerated implementation of the random generator for the default
|
||||
# backend
|
||||
generator_x86_64_aesni = ["tfhe-csprng/generator_x86_64_aesni"]
|
||||
|
||||
# Enable the aarch64 specific accelerated implementation of the random generator for the default
|
||||
# backend
|
||||
generator_aarch64_aes = ["tfhe-csprng/generator_aarch64_aes"]
|
||||
@@ -145,7 +141,7 @@ __long_run_tests = []
|
||||
# good/working configuration for tfhe.
|
||||
# For a target_arch that does not yet have such a feature, one can still enable features manually or
|
||||
# create a feature for said target_arch to make its use simpler.
|
||||
x86_64 = ["generator_x86_64_aesni"]
|
||||
x86_64 = []
|
||||
x86_64-unix = ["x86_64"]
|
||||
|
||||
aarch64 = ["generator_aarch64_aes"]
|
||||
|
||||
@@ -1,19 +1,19 @@
|
||||
#[cfg(feature = "generator_x86_64_aesni")]
|
||||
#[cfg(all(target_arch = "x86_64", target_feature = "aes"))]
|
||||
use tfhe_csprng::generators::AesniRandomGenerator;
|
||||
#[cfg(feature = "generator_aarch64_aes")]
|
||||
use tfhe_csprng::generators::NeonAesRandomGenerator;
|
||||
#[cfg(all(
|
||||
not(feature = "generator_x86_64_aesni"),
|
||||
not(all(target_arch = "x86_64", target_feature = "aes")),
|
||||
not(feature = "generator_aarch64_aes")
|
||||
))]
|
||||
use tfhe_csprng::generators::SoftwareRandomGenerator;
|
||||
|
||||
#[cfg(feature = "generator_x86_64_aesni")]
|
||||
#[cfg(all(target_arch = "x86_64", target_feature = "aes"))]
|
||||
pub type ActivatedRandomGenerator = AesniRandomGenerator;
|
||||
#[cfg(feature = "generator_aarch64_aes")]
|
||||
pub type ActivatedRandomGenerator = NeonAesRandomGenerator;
|
||||
#[cfg(all(
|
||||
not(feature = "generator_x86_64_aesni"),
|
||||
not(all(target_arch = "x86_64", target_feature = "aes")),
|
||||
not(feature = "generator_aarch64_aes")
|
||||
))]
|
||||
pub type ActivatedRandomGenerator = SoftwareRandomGenerator;
|
||||
|
||||
Reference in New Issue
Block a user