nsight时间分析问题

我写了一个测试FFT的程序
for(int j=0;j<10;j++)
{
checkCudaErrors(cufftExecC2C(plan, (cufftComplex *)idata_d, (Complex *)idata_d, CUFFT_FORWARD));
}
用nsight看了一下时间表 有很多cuDeviceGetAttribute 这个是什么意思啊,怎么在时间分析表上看不到cufftExecC2C的调用呢?

LZ您好:

1:cuDeviceGetAttribute是用来获得当前GPU硬件的一些特性的函数,cufft库是一个通用库,需要对各种不同的GPU针对实现和优化等,因此这里应该是先获得当前的GPU的特性,然后根据自身的逻辑选择后面具体计算的一些参数。

2:cufftExecC2C()是封装过的库函数,实际计算的时候会自动转化为多个内部kernel的调用,(以及可能有在前面获得设备参数的基础上装定的kernel的参数),您可以在NVVP的时间线中看到各个内部kernel的执行时间。

大致如此,祝您编码顺利~

ioe 你好,nsight除了可以debug意外还可以分析程序瓶颈,那么它在分析的时候和nvvp有什么优劣呢?分析性能用nvvp好还是nsight好呢?

LZ您好:

profile建议使用nvvp。

调试代码建议使用nsight,(nvvp也没这个功能)。
nsight的profiler仅是一项辅助功能。

大致如此,祝您调试顺利~

(1)我现在想分析一下cufft在执行256*256的二维fft时,对资源是不是已经全部耗尽,如果没有耗尽想通过K20的Hyper-Q来重新写fft kernel来实现资源利于最大化。
(2)我现在想通过多个流的cufft的执行看一下多个流执行是否有重叠可以隐藏一部分时间。
你对我上面的想法可以给点建议吗?谢谢了哈!

LZ您好:

1:一般而言针对特定情况优化的代码有可能超过通用库的实现效率,但不一定划算。
同时,计算的数据规模和您的GPU的情况也会影响我们对效率的判断。比如较小计算规模的情况再弱GPU上可能GPU工作量已经比较饱满,但在强的GPU上,可能GPU基本处于空闲状态。以及,如果计算规模确实很小,那么也许无法通过重写代码予以优化。

2:cufft自身是支持多stream的,您可以参考一下手册中的Streamed CUFFT Transform章节。

祝您好运~

Streamed CUFFT Transform 中Streame1 中的cufft的运算只能与stream2中的cudamemcpy重叠,能不能与stream2中的cufft 重合呢?我是想比较一下同一个流中执行两次cufft 与 两个流中同时执行一次cufft再流同步 两者的执行效率。

LZ您好:

我不清楚在您的计算规模情况下,cufft在执行时的线程规模如何,以及是否能实现kernel的并行执行。
请以您的实测数据为准。

以及如果您对fft计算有更高的要求,比如更好的效率或者更好的灵活性,您也可以考虑自行实现。

大致如此,祝您好运~