Как сделать параллельную обработку с библиотекой fftw3? - PullRequest
0 голосов
/ 17 июня 2020

Мне нужна параллельная обработка для fftw3. Я написал функцию с планом fftw3. И я попытался распараллелить эту функцию с помощью многопоточности. Я не хочу делать блок кода БПФ многопоточным. Я хочу сделать весь класс многопоточным. Однако он выдает ошибку, когда поток больше «1»: Signal: SIGFPE (Arithmetic exception). Он был прерван во время fftw_execute(my_plan);. Нет проблем, когда количество потоков равно 1.

Мой код fft, как показано ниже:

fftw_complex *input = nullptr, *output = nullptr;

input = (fftw_complex *) fftw_malloc(sizeof(fftw_complex) * frameLengthSamples);
output = (fftw_complex *) fftw_malloc(sizeof(fftw_complex) * Nfft);

fftw_plan my_plan;
void fftw_plan_with_nthreads(int nthreads=1);
my_plan = fftw_plan_dft_1d(Nfft, input, output, FFTW_FORWARD, FFTW_ESTIMATE);

for (int j = 0; j < frameLengthSamples; j++) {
    input[j][0] = x(j, i);
    input[j][1] = 0;
}

fftw_execute(my_plan);

for (int j = 0; j < Nfft; j++) {
    std::complex<double> fft_val(static_cast<double>(output[j][0]), static_cast<double>(output[j][1]));
    X(j, i) = fft_val;
}

fftw_destroy_plan(my_plan);
fftw_free(input);
fftw_free(output);

Изменить: например, у меня есть 2 файла wav, и я хочу их обработать то же время. Я не хочу делать один файл многопоточным.

...