1

I am using the cuFFT library. How do I modify my code to see the function calls from this library (or any other CUDA library) in the NVIDIA Visual Profiler NVVP? I am using Windows and Visual Studio 2013.

Below is my code. I convert my image and filter to the Fourier domain, then perform point-wise complex matrix multiplication in a custom CUDA kernel I wrote, and then simply perform the inverse DFT on the filtered images spectrum. The results are accurate, but I am not able to figure out how to view the cuFFT functions in the profiler.

// Execute FFT Plans
cufftExecR2C(fftPlanFwd, (cufftReal *)d_in, (cufftComplex *)d_img_Spectrum);
cufftExecR2C(fftPlanFwd, (cufftReal *)d_filter, (cufftComplex *)d_filter_Spectrum);

// Perform complex pointwise muliplication on filter spectrum and image spectrum
pointWise_complex_matrix_mult_kernel << <grid, block >> >(d_img_Spectrum, d_filter_Spectrum, d_filtered_Spectrum, ROWS, COLS);

// Execute FFT^-1 Plan                  
cufftExecC2R(fftPlanInv, (cufftComplex *)d_filtered_Spectrum, (cufftReal *)d_out);

enter image description here

4

1 回答 1

3

在库的入口点,库调用就像对 C 或 C++ 库的任何其他调用一样:它在主机上执行。在该库调用中,可能会调用 CUDA 内核或其他 CUDA API 函数,用于支持 CUDA GPU 的库,例如 CUFFT。

分析器(至少到 CUDA 7.0 - 请参阅下面关于 CUDA 7.5 nvprof 的注释)本身不支持主机代码的分析。他们主要关注内核调用和CUDA API调用。对像 CUFFT 这样的库的调用本身不被视为 CUDA API 调用。

您尚未显示完整的分析器输出,但您应该看到 CUFFT 库进行 CUDA 内核调用;这些将显示在分析器输出中。在您之前的前两个 CUFFT 调用pointWise_complex_matrix_mult_kernel应该有一个或多个内核调用,每个调用都显示在该内核的左侧,最后一个 CUFFT 调用应该有一个或多个内核调用显示在该内核的右侧。

让主机代码的特定部分显示在分析器中的一种可能方法是使用NVTX(NVIDIA 工具扩展)库来注释您的源代码,这将导致这些注释显示在分析器输出中。您可能希望在您希望在分析器输出中看到的库调用周围放置一个NVTX 范围事件。

另一种方法是尝试nvprofCUDA 7.5 中的新 CPU 分析功能。您可以参考 CUDA 7.5RC 附带的 Profiler 指南的第 3.4 节。

最后,普通的主机分析器应该能够分析您的 CUDA 应用程序,包括 CUFFT 库调用,但它们不会对 GPU 上发生的事情有任何可见性。

编辑:根据下面评论中的讨论,您的代码似乎类似于simpleCUFFT 示例代码。当我在 Win7 x64、VS 2013 Community 和 CUDA 7 上编译和分析该代码时,我得到以下输出(放大以描绘时间线中有趣的部分):

simpleCUFFT 示例代码的 nvvp 分析器时间线

您可以看到在该代码中出现的复杂逐点乘法和缩放内核之前和之后都调用了 CUFFT 内核。我的建议是先用 simpleCUFFT 示例代码而不是你自己的代码做一些类似的事情,看看你是否可以复制上面的输出。如果是这样,问题出在您的代码中(也许您的 CUFFT 调用失败,也许您需要添加适当的错误检查等)

于 2015-07-13T17:10:54.817 回答