跨多个 'overlapped' CUDA Stream 启动的 CUDA FFT 计划重用

CUDA FFT plan reuse across multiple 'overlapped' CUDA Stream launches

我正在尝试使用与 GPU 计算重叠的异步内存传输来提高我的代码的性能。

以前我有一个代码,我在其中创建了一个 FFT 计划,然后多次使用它。在这种情况下,创建 CUDA FFT 计划所投入的时间可以忽略不计,尽管根据此 earlier post 它可能非常重要。

现在我转向流,我正在做的是创建 "same" 计划 "multiple times",然后设置 CUDA FFT 流。根据你们中一些人在 other post 中给出的答案,这是一种浪费。但是,还有其他方法吗?

注意:我正在实时获取数据,因此启动 "batch" CUDA FFT 是不可能的。我正在做的是创建并启动一个新的 CUDA 流作为完整脉冲传输的结果。

注意 2:我也在考虑使用 "pool" 代替 "CUDA Streams/FFT Plans",但我认为这不是一个优雅、明智的解决方案,有什么想法吗?

在我分配 CUDA 流之前,还有其他方法可以 "copy" "existent" fft 计划吗?

谢谢大家!/姑娘们?希望能在圣何塞见到你们中的一些人。 =)

奥马尔

What I'm doing is to create and lauch a new CUDA stream as a result of a complete pulse transmission.

重新使用流,而不是每次都创建一个新流。然后,您可以提前重新使用为该流创建的计划,而无需即时重新创建 "same" 计划。

也许这就是你所说的流池方法的意思。你的批评是它不是 "elegant" 或 "sensible"。我不知道那是什么意思。流水线算法中的流重用是一种常见的策略,如果没有其他原因,只是为了避免 cudaStreamCreate 开销(无论它是大是小)。

袖口计划has a stream associated with it。没有流关联,您无法复制计划。计划是一个不透明的容器。