我在我的程序中使用 cuFFT 函数。我正在使用特斯拉 k20 卡。我的信号大小是 16384。
调用 cufftExecC2C 时将创建多少个块和线程以及在 GPU 上消耗多少内存?
正如@harrism 所指出的,您可以使用nvprof来发现执行参数。
nvprof --print-gpu-trace <your-executable>
对于内存,您也可以使用观察方法,例如nvidia-smi
在应用程序运行时使用来查询 GPU 内存使用情况,或者在 FFT 运行时使用诸如cudaMemGetInfo之类的 CUDA API 调用之一来查询内存。
在 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 估计工作区大小”
如果您制定了计划,则可以使用cufftGetSize...
与估计调用类似的以下 CUDA 5.5 CUFFT API 调用来获得更准确的大小估计。有关详细信息,请参阅上述文档的第 3.5 节。