added Added vmp_extract_row, vmp_extract_row_dft, vmp_extract_tmp_bytes, vmp_prepare_row_dft

-
This commit is contained in:
Jean-Philippe Bossuat
2025-04-16 11:31:58 +02:00
parent 4c1dbc70e5
commit 89369dcdf9
18 changed files with 293 additions and 181 deletions

View File

@@ -1,12 +1,12 @@
use crate::ffi::vec_znx_big::{self, vec_znx_bigcoeff_t};
use crate::{alloc_aligned, assert_alignement, Infos, Module, VecZnx, VecZnxDft, MODULETYPE};
use crate::ffi::vec_znx_big::{self, vec_znx_big_t};
use crate::{alloc_aligned, assert_alignement, Infos, Module, VecZnx, VecZnxDft, BACKEND};
pub struct VecZnxBig {
pub data: Vec<u8>,
pub ptr: *mut u8,
pub n: usize,
pub cols: usize,
pub backend: MODULETYPE,
pub backend: BACKEND,
}
impl VecZnxBig {
@@ -62,9 +62,19 @@ impl VecZnxBig {
self.cols
}
pub fn backend(&self) -> MODULETYPE {
pub fn backend(&self) -> BACKEND {
self.backend
}
/// Returns a non-mutable reference of `T` of the entire contiguous array of the [VecZnxDft].
/// When using [`crate::FFT64`] as backend, `T` should be [f64].
/// When using [`crate::NTT120`] as backend, `T` should be [i64].
/// The length of the returned array is cols * n.
pub fn raw<T>(&self, module: &Module) -> &[T] {
let ptr: *const T = self.ptr as *const T;
let len: usize = (self.cols() * module.n() * 8) / std::mem::size_of::<T>();
unsafe { &std::slice::from_raw_parts(ptr, len) }
}
}
pub trait VecZnxBigOps {
@@ -162,12 +172,12 @@ impl VecZnxBigOps for Module {
unsafe {
vec_znx_big::vec_znx_big_sub_small_a(
self.ptr,
b.ptr as *mut vec_znx_bigcoeff_t,
b.ptr as *mut vec_znx_big_t,
b.cols() as u64,
a.as_ptr(),
a.cols() as u64,
a.n() as u64,
b.ptr as *mut vec_znx_bigcoeff_t,
b.ptr as *mut vec_znx_big_t,
b.cols() as u64,
)
}
@@ -177,12 +187,12 @@ impl VecZnxBigOps for Module {
unsafe {
vec_znx_big::vec_znx_big_sub_small_a(
self.ptr,
c.ptr as *mut vec_znx_bigcoeff_t,
c.ptr as *mut vec_znx_big_t,
c.cols() as u64,
a.as_ptr(),
a.cols() as u64,
a.n() as u64,
b.ptr as *mut vec_znx_bigcoeff_t,
b.ptr as *mut vec_znx_big_t,
b.cols() as u64,
)
}
@@ -192,9 +202,9 @@ impl VecZnxBigOps for Module {
unsafe {
vec_znx_big::vec_znx_big_add_small(
self.ptr,
c.ptr as *mut vec_znx_bigcoeff_t,
c.ptr as *mut vec_znx_big_t,
c.cols() as u64,
b.ptr as *mut vec_znx_bigcoeff_t,
b.ptr as *mut vec_znx_big_t,
b.cols() as u64,
a.as_ptr(),
a.cols() as u64,
@@ -207,9 +217,9 @@ impl VecZnxBigOps for Module {
unsafe {
vec_znx_big::vec_znx_big_add_small(
self.ptr,
b.ptr as *mut vec_znx_bigcoeff_t,
b.ptr as *mut vec_znx_big_t,
b.cols() as u64,
b.ptr as *mut vec_znx_bigcoeff_t,
b.ptr as *mut vec_znx_big_t,
b.cols() as u64,
a.as_ptr(),
a.cols() as u64,
@@ -246,7 +256,7 @@ impl VecZnxBigOps for Module {
b.as_mut_ptr(),
b.cols() as u64,
b.n() as u64,
a.ptr as *mut vec_znx_bigcoeff_t,
a.ptr as *mut vec_znx_big_t,
a.cols() as u64,
tmp_bytes.as_mut_ptr(),
)
@@ -284,7 +294,7 @@ impl VecZnxBigOps for Module {
res.as_mut_ptr(),
res.cols() as u64,
res.n() as u64,
a.ptr as *mut vec_znx_bigcoeff_t,
a.ptr as *mut vec_znx_big_t,
a_range_begin as u64,
a_range_xend as u64,
a_range_step as u64,
@@ -298,9 +308,9 @@ impl VecZnxBigOps for Module {
vec_znx_big::vec_znx_big_automorphism(
self.ptr,
gal_el,
b.ptr as *mut vec_znx_bigcoeff_t,
b.ptr as *mut vec_znx_big_t,
b.cols() as u64,
a.ptr as *mut vec_znx_bigcoeff_t,
a.ptr as *mut vec_znx_big_t,
a.cols() as u64,
);
}
@@ -311,9 +321,9 @@ impl VecZnxBigOps for Module {
vec_znx_big::vec_znx_big_automorphism(
self.ptr,
gal_el,
a.ptr as *mut vec_znx_bigcoeff_t,
a.ptr as *mut vec_znx_big_t,
a.cols() as u64,
a.ptr as *mut vec_znx_bigcoeff_t,
a.ptr as *mut vec_znx_big_t,
a.cols() as u64,
);
}