mirror of
https://github.com/arnaucube/poulpy.git
synced 2026-02-10 21:26:41 +01:00
added Added vmp_extract_row, vmp_extract_row_dft, vmp_extract_tmp_bytes, vmp_prepare_row_dft
-
This commit is contained in:
@@ -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,
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user