FFTW3 支持多线程计算,可以显著提高大规模傅里叶变换的性能。以下是完整的多线程使用方法和最佳实践。
一、基础多线程设置
1. 初始化和线程配置
#include <fftw3.h>
int main() {
// 初始化多线程支持
if (fftw_init_threads() == 0) {
printf("FFTW线程初始化失败\n");
return 1;
}
// 设置要使用的线程数(通常设为CPU核心数)
int threads = 4;
fftw_plan_with_nthreads(threads);
// ...后续FFTW操作...
// 程序结束时清理线程资源
fftw_cleanup_threads();
return 0;
}
2. 编译选项
需要链接 fftw3_threads
库:
bash
gcc your_program.c -o your_program -lfftw3_threads -lfftw3 -lm -lpthread
二、完整多线程示例
1. 一维复数FFT多线程实现
#include <fftw3.h>
#include <stdio.h>
#include <math.h>
#define N 1048576 // 1M点FFT
void threaded_fft_example() {
// 1. 初始化多线程
fftw_init_threads();
fftw_plan_with_nthreads(4); // 使用4个线程
// 2. 分配对齐内存
fftw_complex *in = fftw_alloc_complex(N);
fftw_complex *out = fftw_alloc_complex(N);
// 3. 创建计划(使用MEASURE获取最佳性能)
fftw_plan plan = fftw_plan_dft_1d(N, in, out, FFTW_FORWARD, FFTW_MEASURE);
// 4. 填充输入数据(示例: 多个频率的正弦波)
for (int i = 0; i < N; i++) {
double t = (double)i/N;
in[i][0] = sin(2*M_PI*50*t) + 0.5