【发布时间】:2012-07-07 20:00:34
【问题描述】:
是否可以创建一个单个 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 内的数据(或它指向的数据)?或者fftSetup 中是否有一些临时缓冲区(暂存空间)由vDSP_fft_zrip() 在执行其 FFT 计算时写入?
2) 如果像fftSetup 这样的数据以“只读”方式访问,多个进程/线程/任务/块可以同时访问它吗? (我在考虑这样一种情况,即多个进程可以打开同一个文件进行读取,但不一定用于写入或追加。这个类比合适吗?)
在相关说明中,FFTSetup 数据结构占用了多少内存?有什么办法可以查到吗? (它是一种不透明的数据类型。)
【问题讨论】:
标签: objective-c ios multithreading grand-central-dispatch accelerate-framework