CUDA内核执行时间在较大的阵列上不会改变

时间:2014-12-08 16:56:17

标签: cuda nsight

我正在分析不同1d输入大小的cuda应用程序。但是,对于小矢量大小,NSIGHT分析器内核执行时间类似。例如,矢量大小512和2048之间没有任何差异。内核执行时间对于较大的矢量线性增加,但在矢量大小512和2048等较小矢量上没有差异。这是预期的结果吗?

1 个答案:

答案 0 :(得分:2)

假设启动任意大小的内核需要3微秒的执行时间,并且在该开销之后,向量中每个点的执行时间为1 ns。现在让我们问一下,当x小(比如1024)和2x大时,xx点的内核执行的百分比差异是多少(比方说,1048576)?

x = 1024:

execution_time(x) =  3000+1024 = 4024ns
execution_time(2x) = 3000+2048 = 5048ns
%difference = (5048-4024)/4024 * 100% = 25.45%

x = 1048576:

execution_time(x) =  3000+1048576 = 1051576ns
execution_time(2x) = 3000+2097152 = 2100152ns
%difference = (2100152-1051576)/1051576 * 100% = 99.71%

这展示了当执行时间与固定开销相比时,在测量执行时间(和执行时间的变化)时的期望,与大< / em>与固定开销相比。

在小的情况下,执行时间被开销“淹没”。加倍“工作”不会导致执行时间加倍。在大的情况下,与执行时间相比,开销是微不足道的。因此,在大的情况下,我们看到大致预期的结果,“工作”(矢量长度)加倍大约使执行时间加倍。

请注意,这里的“固定开销”可能由许多项组成,“内核启动开销”只是一个。 CUDA通常还有其他与初始化相关的启动固定“开销”,它也起到了作用。