是否可以创建单个 FFTSetup
数据结构并使用它同时执行多个 FFT 计算?会像以下工作吗?
FFTSetup fftSetup = vDSP_create_fftsetup(
16, // vDSP_Length __vDSP_log2n,
kFFTRadix2 // FFTRadix __vDSP_radix
);
NSAssert(fftSetup != NULL, @"vDSP_create_fftsetup() failed to allocate storage");
for (int i = 0; i < 100; i++)
{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0),
^{
vDSP_fft_zrip(
fftSetup, // FFTSetup __vDSP_setup,
&(splitComplex[i]), // DSPSplitComplex *__vDSP_ioData,
1, // vDSP_Stride __vDSP_stride,
16, // vDSP_Length __vDSP_log2n,
kFFTDirection_Forward // FFTDirection __vDSP_direction
);
});
}
我想答案取决于以下考虑:
1) 是否仅以“只读”方式vDSP_fft_zrip()
访问其中的数据(或它指向的数据)?fftSetup
或者在执行其 FFT 计算时fftSetup
可能会写入一些临时缓冲区(暂存空间)?vDSP_fft_zrip()
2)如果fftSetup
以“只读”方式访问这样的数据,多个进程/线程/任务/块可以同时访问它吗?(我在考虑这样一种情况,即有可能多个进程打开同一个文件进行读取,但不一定用于写入或追加。这个类比合适吗?)
FFTSetup
在相关的说明中,数据结构占用了多少内存?有什么办法可以查到吗?(它是一种不透明的数据类型。)