我有一个关于 Microsoft PPL 库和一般并行编程的问题。我正在使用 FFTW 执行大量(100,000)64 x 64 x 64 FFT 和逆 FFT。在我当前的实现中,我使用并行 for 循环并在循环内分配存储数组。我注意到在这些情况下,我的 CPU 使用率最高只有 60-70%。(请注意,这仍然比我测试过的 FFTW 提供的内置线程 FFT 更好地利用)。由于我使用的是 fftw_malloc,是否有可能发生过度锁定而阻止完全使用?
鉴于此,是否建议在主处理循环之前为每个线程预先分配存储数组,这样循环本身就不需要锁?如果是这样,MSFT PPL 库怎么可能做到这一点?我之前一直在使用 OpenMP,在这种情况下,使用提供的函数获取线程 ID 很简单。但是,我在 PPL 文档中没有看到类似的功能。