调用 CUDA cufftExecC2C 时创建的块/线程数和占用的内存数

Posted

技术标签:

【中文标题】调用 CUDA cufftExecC2C 时创建的块/线程数和占用的内存数【英文标题】:Number of created blocks/threads and of occupied memory when CUDA cufftExecC2C is invoked 【发布时间】:2013-06-29 17:19:39 【问题描述】:

我在我的程序中使用了 cuFFT 函数。我正在使用特斯拉 k20 卡。我的信号大小是 16384。

调用 cufftExecC2C 时会创建多少块和线程,在 GPU 上会消耗多少内存?

【问题讨论】:

标题询问内存,正文询问执行参数。你想知道哪个? 执行参数可以用nvprof自己回答。 nvprof --print-gpu-trace <your-executable>. @talonmies 我想知道内存和执行参数.. 【参考方案1】:

正如@harrism 所指出的,您可以使用nvprof 来发现执行参数。

nvprof --print-gpu-trace <your-executable>

对于内存,您也可以使用观察方法,例如在应用程序运行时使用nvidia-smi 查询 GPU 内存使用情况,或者使用cudaMemGetInfo 等 CUDA API 调用之一来查询内存,而您的FFT 正在运行。

在 CUDA 5.5 中,还引入了一组新的 CUFFT API 调用来帮助估计内存需求。相关的 API 调用是:

cufftEstimate1d(…)
cufftEstimate2d(…)
cufftEstimate3d(…)
cufftEstimateMany(…)

这些调用将返回建议的转换类型和大小的估计内存使用大小。

请参阅 CUDA 5.5 RC 文档(例如,对于 linux cuda 5.5 RC 安装):

/usr/local/cuda/doc/pdf/CUFFT_Library.pdf

特别是第 3.4 节“CUFFT 估计工作区大小”

如果您制定了计划,则可以使用与估计调用类似的以下 CUDA 5.5 CUFFT API cufftGetSize... 调用来获得更准确的大小估计。详情请参阅上述文档的第 3.5 节。

【讨论】:

以上是关于调用 CUDA cufftExecC2C 时创建的块/线程数和占用的内存数的主要内容,如果未能解决你的问题,请参考以下文章

在 DLLMain 中调用 CUDA 函数

如何从驱动程序 API 使用运行时 API 创建的上下文

如何从 C# 调用 CUDA

CUDA Nsight - 找出内核/运行时 api 调用之间的 CPU 在做啥

CUDA 链接错误(Lib 到 Dll)

tensorflow gpu版本运行时怎么知道有没有调用gpu以及cuda加速