feat : adding multithreading support for faster DFT

Signed-off-by: Vincenzo Petrolo <vincenzo@kernel-space.org>
This commit is contained in:
Vincenzo Petrolo 2021-05-21 16:06:39 +02:00
parent 55ec7bde96
commit 827da5f145
No known key found for this signature in database
GPG Key ID: 9D48955FE2C26971
3 changed files with 16 additions and 1 deletions

View File

@ -354,3 +354,9 @@ DISTFILES += \
build_android/package_source/gradle/wrapper/gradle-wrapper.properties \ build_android/package_source/gradle/wrapper/gradle-wrapper.properties \
build_android/package_source/gradlew.bat \ build_android/package_source/gradlew.bat \
build_android/package_source/res/xml/device_filter.xml build_android/package_source/res/xml/device_filter.xml
unix|win32: LIBS += -lomp
unix|win32: LIBS += -lfftw3f_omp
unix|win32: LIBS += -lfftw3_threads

View File

@ -5,6 +5,7 @@
#include <math.h> #include <math.h>
#include "daqloadprompt.h" #include "daqloadprompt.h"
#include <iostream> #include <iostream>
#include <omp.h>
isoDriver::isoDriver(QWidget *parent) : QLabel(parent) isoDriver::isoDriver(QWidget *parent) : QLabel(parent)
{ {
@ -35,10 +36,17 @@ isoDriver::isoDriver(QWidget *parent) : QLabel(parent)
connect(slowTimer, SIGNAL(timeout()), this, SLOT(slowTimerTick())); connect(slowTimer, SIGNAL(timeout()), this, SLOT(slowTimerTick()));
/*Creating DFT plan*/ /*Creating DFT plan*/
fftw_init_threads();
fftw_plan_with_nthreads(omp_get_max_threads());
std::cout << "Starting with " << omp_get_max_threads() << "threads" << std::endl;
this->N = 1<<17; this->N = 1<<17;
this->N *= omp_get_max_threads();
this->in_buffer = fftw_alloc_real(N); this->in_buffer = fftw_alloc_real(N);
this->out_buffer = fftw_alloc_complex(N); this->out_buffer = fftw_alloc_complex(N);
std::cout << in_buffer << " " << out_buffer << " " << N<< std::endl;
this->plan = fftw_plan_dft_r2c_1d(N,in_buffer, out_buffer,0); this->plan = fftw_plan_dft_r2c_1d(N,in_buffer, out_buffer,0);
std::cout << plan << std::endl;
} }
void isoDriver::setDriver(genericUsbDriver *newDriver){ void isoDriver::setDriver(genericUsbDriver *newDriver){
@ -667,7 +675,7 @@ QVector<double> isoDriver::getFrequencies()
double delta_freq = ((double) 375000)/ ((double) N); double delta_freq = ((double) 375000)/ ((double) N);
QVector<double> f(max_freq); QVector<double> f(max_freq);
for (int i = 0; i*delta_freq < max_freq; i++) { for (int i = 0; i < max_freq; i++) {
f[i] = i*delta_freq; f[i] = i*delta_freq;
} }
return f; return f;

View File

@ -131,6 +131,7 @@ private:
double *in_buffer; double *in_buffer;
fftw_complex *out_buffer; fftw_complex *out_buffer;
int N; int N;
double maximum = -1;
//Generic Functions //Generic Functions