objective-c - 并发访问 GCD 中的单个 FFTSetup 数据结构

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

是否可以创建一个单个 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中的数据以“只读”方式访问,多个进程/线程/任务/ block 是否可以同时访问它? (我在考虑这样一种情况,即多个进程可以打开同一个文件进行读取,但不一定用于写入或追加。这个类比合适吗?)

在相关说明中,FFTSetup 数据结构占用了多少内存?有什么办法可以知道吗? (它是一种不透明的数据类型。)

最佳答案

您可以创建一个 FFT 设置并重复并同时使用它。这是预期用途。 (我是 vDSP_fft_zrip 和 vDSP 中其他 FFT 实现的当前实现的作者。)

关于objective-c - 并发访问 GCD 中的单个 FFTSetup 数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11378223/

相关文章:

java - 将单例设计模式实现为模板

iphone - 如果您在 iTunes Connect 中输入了错误的 bundle ID,该怎么办

ios - 动画时函数休眠

ios - UITableView 混合部分项目

iOS - CoreBluetooth didDiscoverPeripheral 仅调用一次

multithreading - HTML5 Web Worker 是针对一个页面还是跨页面

ios - 放大特定的 MKMapView 框架

objective-c - 如何在 NSUserDefaults 中存储带有 block 变量的自定义对象

ios - 确定 UITextView 的最大字体大小

c++ - Pthread_create() 不正确的启动例程参数传递