Backport fixes for IPP v9
This commit is contained in:
@@ -35,6 +35,7 @@
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_IPP
|
||||
#include <ippversion.h>
|
||||
#include <ipps.h>
|
||||
#endif
|
||||
|
||||
@@ -148,13 +149,21 @@ public:
|
||||
|
||||
~D_IPP() {
|
||||
if (m_fspec) {
|
||||
#if (IPP_VERSION_MAJOR >= 9)
|
||||
ippsFree(m_fspecbuf);
|
||||
#else
|
||||
ippsFFTFree_R_32f(m_fspec);
|
||||
#endif
|
||||
ippsFree(m_fbuf);
|
||||
ippsFree(m_fpacked);
|
||||
ippsFree(m_fspare);
|
||||
}
|
||||
if (m_dspec) {
|
||||
#if (IPP_VERSION_MAJOR >= 9)
|
||||
ippsFree(m_dspecbuf);
|
||||
#else
|
||||
ippsFFTFree_R_64f(m_dspec);
|
||||
#endif
|
||||
ippsFree(m_dbuf);
|
||||
ippsFree(m_dpacked);
|
||||
ippsFree(m_dspare);
|
||||
@@ -170,6 +179,20 @@ public:
|
||||
|
||||
void initFloat() {
|
||||
if (m_fspec) return;
|
||||
#if (IPP_VERSION_MAJOR >= 9)
|
||||
int specSize, specBufferSize, bufferSize;
|
||||
ippsFFTGetSize_R_32f(m_order, IPP_FFT_NODIV_BY_ANY, ippAlgHintFast,
|
||||
&specSize, &specBufferSize, &bufferSize);
|
||||
m_fspecbuf = ippsMalloc_8u(specSize);
|
||||
Ipp8u *tmp = ippsMalloc_8u(specBufferSize);
|
||||
m_fbuf = ippsMalloc_8u(bufferSize);
|
||||
m_fpacked = ippsMalloc_32f(m_size + 2);
|
||||
m_fspare = ippsMalloc_32f(m_size / 2 + 1);
|
||||
ippsFFTInit_R_32f(&m_fspec,
|
||||
m_order, IPP_FFT_NODIV_BY_ANY, ippAlgHintFast,
|
||||
m_fspecbuf, tmp);
|
||||
ippsFree(tmp);
|
||||
#else
|
||||
int specSize, specBufferSize, bufferSize;
|
||||
ippsFFTGetSize_R_32f(m_order, IPP_FFT_NODIV_BY_ANY, ippAlgHintFast,
|
||||
&specSize, &specBufferSize, &bufferSize);
|
||||
@@ -178,10 +201,25 @@ public:
|
||||
m_fspare = ippsMalloc_32f(m_size / 2 + 1);
|
||||
ippsFFTInitAlloc_R_32f(&m_fspec, m_order, IPP_FFT_NODIV_BY_ANY,
|
||||
ippAlgHintFast);
|
||||
#endif
|
||||
}
|
||||
|
||||
void initDouble() {
|
||||
if (m_dspec) return;
|
||||
#if (IPP_VERSION_MAJOR >= 9)
|
||||
int specSize, specBufferSize, bufferSize;
|
||||
ippsFFTGetSize_R_64f(m_order, IPP_FFT_NODIV_BY_ANY, ippAlgHintFast,
|
||||
&specSize, &specBufferSize, &bufferSize);
|
||||
m_dspecbuf = ippsMalloc_8u(specSize);
|
||||
Ipp8u *tmp = ippsMalloc_8u(specBufferSize);
|
||||
m_dbuf = ippsMalloc_8u(bufferSize);
|
||||
m_dpacked = ippsMalloc_64f(m_size + 2);
|
||||
m_dspare = ippsMalloc_64f(m_size / 2 + 1);
|
||||
ippsFFTInit_R_64f(&m_dspec,
|
||||
m_order, IPP_FFT_NODIV_BY_ANY, ippAlgHintFast,
|
||||
m_dspecbuf, tmp);
|
||||
ippsFree(tmp);
|
||||
#else
|
||||
int specSize, specBufferSize, bufferSize;
|
||||
ippsFFTGetSize_R_64f(m_order, IPP_FFT_NODIV_BY_ANY, ippAlgHintFast,
|
||||
&specSize, &specBufferSize, &bufferSize);
|
||||
@@ -190,6 +228,7 @@ public:
|
||||
m_dspare = ippsMalloc_64f(m_size / 2 + 1);
|
||||
ippsFFTInitAlloc_R_64f(&m_dspec, m_order, IPP_FFT_NODIV_BY_ANY,
|
||||
ippAlgHintFast);
|
||||
#endif
|
||||
}
|
||||
|
||||
void packFloat(const float *R__ re, const float *R__ im) {
|
||||
@@ -401,6 +440,8 @@ private:
|
||||
int m_order;
|
||||
IppsFFTSpec_R_32f *m_fspec;
|
||||
IppsFFTSpec_R_64f *m_dspec;
|
||||
Ipp8u *m_fspecbuf;
|
||||
Ipp8u *m_dspecbuf;
|
||||
Ipp8u *m_fbuf;
|
||||
Ipp8u *m_dbuf;
|
||||
float *m_fpacked;
|
||||
@@ -1569,6 +1610,7 @@ public:
|
||||
#endif
|
||||
bool save = false;
|
||||
if (m_extantf > 0 && --m_extantf == 0) save = true;
|
||||
(void)save;
|
||||
#ifndef FFTW_DOUBLE_ONLY
|
||||
if (save) saveWisdom('f');
|
||||
#endif
|
||||
@@ -1586,6 +1628,7 @@ public:
|
||||
#endif
|
||||
bool save = false;
|
||||
if (m_extantd > 0 && --m_extantd == 0) save = true;
|
||||
(void)save;
|
||||
#ifndef FFTW_SINGLE_ONLY
|
||||
if (save) saveWisdom('d');
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user