Update to custom fheuint prepare

This commit is contained in:
Pro7ech
2025-11-07 08:49:32 +01:00
parent 5cf184d950
commit 1d23dfc078
10 changed files with 112 additions and 34 deletions

View File

@@ -111,3 +111,9 @@ pub trait VmpApplyDftToDftAdd<B: Backend> {
A: VecZnxDftToRef<B>,
C: VmpPMatToRef<B>;
}
pub trait VmpZero<B: Backend> {
fn vmp_zero<R>(&self, res: &mut R)
where
R: VmpPMatToMut<B>;
}

View File

@@ -1,7 +1,7 @@
use crate::{
api::{
VmpApplyDft, VmpApplyDftTmpBytes, VmpApplyDftToDft, VmpApplyDftToDftAdd, VmpApplyDftToDftAddTmpBytes,
VmpApplyDftToDftTmpBytes, VmpPMatAlloc, VmpPMatBytesOf, VmpPMatFromBytes, VmpPrepare, VmpPrepareTmpBytes,
VmpApplyDftToDftTmpBytes, VmpPMatAlloc, VmpPMatBytesOf, VmpPMatFromBytes, VmpPrepare, VmpPrepareTmpBytes, VmpZero,
},
layouts::{
Backend, MatZnxToRef, Module, Scratch, VecZnxDftToMut, VecZnxDftToRef, VecZnxToRef, VmpPMatOwned, VmpPMatToMut,
@@ -10,7 +10,7 @@ use crate::{
oep::{
VmpApplyDftImpl, VmpApplyDftTmpBytesImpl, VmpApplyDftToDftAddImpl, VmpApplyDftToDftAddTmpBytesImpl, VmpApplyDftToDftImpl,
VmpApplyDftToDftTmpBytesImpl, VmpPMatAllocBytesImpl, VmpPMatAllocImpl, VmpPMatFromBytesImpl, VmpPrepareImpl,
VmpPrepareTmpBytesImpl,
VmpPrepareTmpBytesImpl, VmpZeroImpl,
},
};
@@ -161,3 +161,15 @@ where
B::vmp_apply_dft_to_dft_add_impl(self, res, a, b, scale, scratch);
}
}
impl<B> VmpZero<B> for Module<B>
where
B: Backend + VmpZeroImpl<B>,
{
fn vmp_zero<R>(&self, res: &mut R)
where
R: VmpPMatToMut<B>,
{
B::vmp_zero_impl(self, res);
}
}

View File

@@ -145,3 +145,13 @@ pub unsafe trait VmpApplyDftToDftAddImpl<B: Backend> {
A: VecZnxDftToRef<B>,
C: VmpPMatToRef<B>;
}
/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
/// * See TODO.
/// * See [crate::api::VmpZero] for corresponding public API.
/// # Safety [crate::doc::backend_safety] for safety contract.
pub unsafe trait VmpZeroImpl<B: Backend> {
fn vmp_zero_impl<R>(module: &Module<B>, res: &mut R)
where
R: VmpPMatToMut<B>;
}

View File

@@ -1,6 +1,6 @@
use crate::{
cast_mut,
layouts::{MatZnx, MatZnxToRef, VecZnx, VecZnxToRef, VmpPMatToMut, ZnxView, ZnxViewMut},
layouts::{DataViewMut, MatZnx, MatZnxToRef, VecZnx, VecZnxToRef, VmpPMatToMut, ZnxView, ZnxViewMut},
oep::VecZnxDftAllocBytesImpl,
reference::fft64::{
reim::{ReimDFTExecute, ReimFFTTable, ReimFromZnx, ReimZero},
@@ -157,6 +157,13 @@ pub fn vmp_apply_dft_to_dft_tmp_bytes(a_size: usize, prows: usize, pcols_in: usi
(16 + 8 * row_max * pcols_in) * size_of::<f64>()
}
pub fn vmp_zero<R, BE: Backend>(res: &mut R)
where
R: VmpPMatToMut<BE>,
{
res.to_mut().data_mut().fill(0);
}
pub fn vmp_apply_dft_to_dft<R, A, M, BE>(res: &mut R, a: &A, pmat: &M, tmp_bytes: &mut [f64])
where
BE: Backend<ScalarPrep = f64>