aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhayati ayguen <h_ayguen@web.de>2020-06-13 01:59:49 +0200
committerhayati ayguen <h_ayguen@web.de>2020-06-13 02:02:54 +0200
commit223c62a9746d01f5987a3debfe14c67b0e4ff794 (patch)
treedcfd7d4c486f0d3514f89365e819153165de7c05
parent1c17fd410b4fe1e615e8a8ad4abb87cf406177d2 (diff)
downloadpffft-223c62a9746d01f5987a3debfe14c67b0e4ff794.tar.gz
added single precision float of PocketFFt to benchmark
Signed-off-by: hayati ayguen <h_ayguen@web.de>
-rw-r--r--CMakeLists.txt8
-rw-r--r--bench_pffft.c43
m---------pocketfft0
3 files changed, 36 insertions, 15 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 87fd0e0..160b3c3 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -64,7 +64,7 @@ endif()
if (USE_BENCH_POCKET)
# git submodule add https://github.com/hayguen/pocketfft.git
- if (EXISTS "${CMAKE_CURRENT_LIST_DIR}/pocketfft/pocketfft.c")
+ if (EXISTS "${CMAKE_CURRENT_LIST_DIR}/pocketfft/pocketfft_double.c")
message(STATUS "found subdir pocketfft")
set(PATH_POCKET "${CMAKE_CURRENT_LIST_DIR}/pocketfft")
add_subdirectory( "${PATH_POCKET}" )
@@ -248,6 +248,12 @@ if (USE_TYPE_FLOAT)
target_compile_definitions(bench_pffft_float PRIVATE HAVE_KISS_FFT=1)
target_link_libraries(bench_pffft_float KissFFT)
endif()
+
+ if (PATH_POCKET AND USE_BENCH_POCKET)
+ target_compile_definitions(bench_pffft_float PRIVATE HAVE_POCKET_FFT=1)
+ target_link_libraries(bench_pffft_float PocketFFT)
+ endif()
+
endif()
if (USE_TYPE_DOUBLE)
diff --git a/bench_pffft.c b/bench_pffft.c
index 5d91c0d..cd12f48 100644
--- a/bench_pffft.c
+++ b/bench_pffft.c
@@ -26,6 +26,7 @@
*/
#define CONCAT_TOKENS(A, B) A ## B
+#define CONCAT_THREE_TOKENS(A, B, C) A ## B ## C
#ifdef PFFFT_ENABLE_FLOAT
#include "pffft.h"
@@ -45,7 +46,6 @@ typedef PFFFTD_Setup PFFFT_SETUP;
#define PFFFT_FUNC(F) CONCAT_TOKENS(pffftd_, F)
#endif
-
#ifdef PFFFT_ENABLE_FLOAT
#include "fftpack.h"
@@ -62,9 +62,23 @@ typedef PFFFTD_Setup PFFFT_SETUP;
#endif
#ifdef HAVE_POCKET_FFT
-#include <pocketfft.h>
+#include <pocketfft_double.h>
+#include <pocketfft_single.h>
#endif
+#ifdef PFFFT_ENABLE_FLOAT
+ #define POCKFFTR_PRE(R) CONCAT_TOKENS(rffts, R)
+ #define POCKFFTC_PRE(R) CONCAT_TOKENS(cffts, R)
+ #define POCKFFTR_MID(L,R) CONCAT_THREE_TOKENS(L, rffts, R)
+ #define POCKFFTC_MID(L,R) CONCAT_THREE_TOKENS(L, cffts, R)
+#else
+ #define POCKFFTR_PRE(R) CONCAT_TOKENS(rfft, R)
+ #define POCKFFTC_PRE(R) CONCAT_TOKENS(cfft, R)
+ #define POCKFFTR_MID(L,R) CONCAT_THREE_TOKENS(L, rfft, R)
+ #define POCKFFTC_MID(L,R) CONCAT_THREE_TOKENS(L, cfft, R)
+#endif
+
+
#include <math.h>
#include <stdio.h>
@@ -167,7 +181,7 @@ int compiledInAlgo[NUM_FFT_ALGOS] = {
#else
0,
#endif
-#if defined(HAVE_POCKET_FFT) && !defined(PFFFT_ENABLE_FLOAT)
+#if defined(HAVE_POCKET_FFT)
1, /* "Pocket " */
#else
0,
@@ -833,19 +847,20 @@ void benchmark_ffts(int N, int cplx, int withFFTWfullMeas, double iterCal, doubl
}
#endif
-#if defined(HAVE_POCKET_FFT) && !defined(PFFFT_ENABLE_FLOAT)
+#if defined(HAVE_POCKET_FFT)
+
Nmax = (cplx ? nextPow2N*2 : nextPow2N);
X[Nmax] = checkVal;
if ( 1 || PFFFT_FUNC(is_power_of_two)(N) )
{
- rfft_plan planr;
- cfft_plan planc;
+ POCKFFTR_PRE(_plan) planr;
+ POCKFFTC_PRE(_plan) planc;
te = uclock_sec();
if (cplx) {
- planc = make_cfft_plan(nextPow2N);
+ planc = POCKFFTC_MID(make_,_plan)(nextPow2N);
} else {
- planr = make_rfft_plan(nextPow2N);
+ planr = POCKFFTR_MID(make_,_plan)(nextPow2N);
}
t0 = uclock_sec();
@@ -856,18 +871,18 @@ void benchmark_ffts(int N, int cplx, int withFFTWfullMeas, double iterCal, doubl
if (cplx) {
assert( X[Nmax] == checkVal );
memcpy(Y, X, 2*nextPow2N * sizeof(pffft_scalar) );
- cfft_forward(planc, Y, 1.);
+ POCKFFTC_PRE(_forward)(planc, Y, 1.);
assert( X[Nmax] == checkVal );
memcpy(X, Y, 2*nextPow2N * sizeof(pffft_scalar) );
- cfft_backward(planc, X, 1./nextPow2N);
+ POCKFFTC_PRE(_backward)(planc, X, 1./nextPow2N);
assert( X[Nmax] == checkVal );
} else {
assert( X[Nmax] == checkVal );
memcpy(Y, X, nextPow2N * sizeof(pffft_scalar) );
- rfft_forward(planr, Y, 1.);
+ POCKFFTR_PRE(_forward)(planr, Y, 1.);
assert( X[Nmax] == checkVal );
memcpy(X, Y, nextPow2N * sizeof(pffft_scalar) );
- rfft_backward(planr, X, 1./nextPow2N);
+ POCKFFTR_PRE(_backward)(planr, X, 1./nextPow2N);
assert( X[Nmax] == checkVal );
}
++max_iter;
@@ -876,9 +891,9 @@ void benchmark_ffts(int N, int cplx, int withFFTWfullMeas, double iterCal, doubl
} while ( t1 < tstop );
if (cplx) {
- destroy_cfft_plan(planc);
+ POCKFFTC_MID(destroy_,_plan)(planc);
} else {
- destroy_rfft_plan(planr);
+ POCKFFTR_MID(destroy_,_plan)(planr);
}
flops = (max_iter*2) * ((cplx ? 5 : 2.5)*N*log((double)N)/M_LN2); /* see http://www.fftw.org/speed/method.html */
diff --git a/pocketfft b/pocketfft
-Subproject f03285da5dbe1005888211ab95bbb116ea4af73
+Subproject 78a0254546e3cd0e042e0216b71f7e1e79f0309