 |
|
|
|
Actions
|
|
[ Date Prev][ Date Next][ Thread Prev][ Thread Next][ Date Index][ Thread Index]
Re: [vsipl++] [patch] Some enhancements to the FFT code.
- Subject: Re: [vsipl++] [patch] Some enhancements to the FFT code.
- From: Jules Bergmann <jules@xxxxxxxxxxxxxxxx>
- Date: Mon, 27 Feb 2006 08:50:25 -0500
Stefan Seefeld wrote:
Please find attached two patches (folded into one):
The SAL FFT backend uses a number of different
functions that take temporary workspace, to avoid
the input array to be clobbered. This is a first
step to allow the frontend not to copy data in
some (the most frequent ?) cases.
The second part of the patch is the addition of
tests to tests/fft.cpp that specifically targets
the Complex_split_fmt. It passes with builtin fft
(i.e. FFTW), and I'm planning to add support for
split format to the SAR backend in the coming
days.
Regards,
Stefan
Stefan,
I'm not sure if the mercury FFTs have any stated alignment requirements
for their temporary buffer, but to be safe we should allocate with
either a 16-byte (altivec) or 32-byte (cache line) alignment using the
alloc_aligned function.
Otherwise, this looks good, please check it in.
-- Jules
------------------------------------------------------------------------
VSIP_THROW((std::bad_alloc))
{
self.is_forward_ = (expn == -1);
+ self.buffer_ = new Complex_of<inT>::type[dom.size()];
int const sal_alignment = 16;
self.buffer_ = vsip::impl::alloc_align(sal_alignment,
dom.size() * sizeof(...));
unsigned long max = sal::log2n<D>::translate(dom, sd, self.size_);
sal::fft_planner<D, inT, outT>::create(self.plan_, max);
}
@@ -202,6 +203,7 @@
destroy(Fft_core<D, inT, outT, doFftm>& self) VSIP_THROW((std::bad_alloc))
{
sal::fft_planner<D, inT, outT>::destroy(self.plan_);
+ delete [] self.buffer_;
vsip::impl::free_align(self.buffer_);
}
--
Jules Bergmann
CodeSourcery
jules@xxxxxxxxxxxxxxxx
(650) 331-3385 x705
|
|