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

CUDA内核在较大阵列上的执行时间不变,cuda,nsight,Cuda,Nsight,我正在分析不同1d输入大小的cuda应用程序。然而,对于较小的向量大小,NSIGHT profiler内核执行时间是相似的。例如,向量大小512和2048之间没有任何差异。对于较大的向量,内核执行时间线性增加,但对于较小的向量,如向量大小512和2048,则没有差异。这是预期的结果吗 让我们假设启动任意大小的内核需要3微秒的执行时间,在这之后,向量中的每个点需要1ns的执行时间。现在让我们问一下,当x小(比如1024)和x大(比如1048576)时,x和2x点的内核执行的百分比差异是多少 x=1

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

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

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%
这演示了当执行时间与固定开销相比较小时,以及当执行时间与固定开销相比较大时,在测量执行时间(以及执行时间的变化)时所期望的结果

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

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