我正在分析不同1d输入大小的cuda应用程序。但是,对于小矢量大小,NSIGHT分析器内核执行时间类似。例如,矢量大小512和2048之间没有任何差异。内核执行时间对于较大的矢量线性增加,但在矢量大小512和2048等较小矢量上没有差异。这是预期的结果吗?
答案 0 :(得分:2)
假设启动任意大小的内核需要3微秒的执行时间,并且在该开销之后,向量中每个点的执行时间为1 ns。现在让我们问一下,当x
小(比如1024)和2x
大时,x
和x
点的内核执行的百分比差异是多少(比方说,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通常还有其他与初始化相关的启动固定“开销”,它也起到了作用。