小编inw*_*wit的帖子

在GCD中并发访问单个FFTSetup数据结构

是否可以创建单个 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
                  );
  });
}
Run Code Online (Sandbox Code Playgroud)

我想答案取决于以下几点:

1)是否vDSP_fft_zrip()fftSetup以"只读"方式访问其中的数据(或其指向的数据)?或者是否有一些临时缓冲区(临时空间)在执行其FFT计算时fftSetup写入vDSP_fft_zrip()

2)如果fftSetup 以"只读"的方式访问类似的数据,多个进程/线程/任务/块是否可以同时访问它?(我正在考虑这样一种情况:多个进程可以打开同一个文件进行读取,但不一定是写入或追加.这个类比是否合适?)

在相关的说明中,FFTSetup数据结构占用了多少内存?有没有办法找出来?(这是一种不透明的数据类型.)

multithreading objective-c grand-central-dispatch ios accelerate-framework

2
推荐指数
1
解决办法
692
查看次数