相同的核函数在不同平台上运行使用的寄存器数量不同

当我在不同平台上分析两个相同的核函数时(笔记本电脑上的 gtx 1660ti 和实验室服务器上的 rtx 2080 ti,它们都有相同的计算能力Compute Capabiity),我得到了不同的结果。 假设它们是核函数 1 和核函数 2,它们所执行的内容一致(只是算法不同)并以 1 个线程块,其中有 1024 个线程,启动。 我在核函数1中设计,使它应该使用更多的寄存器并且运行时间更短(因为减少了使用全局内存和共享内存的次数)。 我的笔记本电脑上的 gtx 1660ti 得到的结果也和预期相似。 核函数 2 使用 37 个寄存器,持续时间为 488微秒,而核函数 1 使用 41 个寄存器(+10.8%),持续时间为 459微秒(-5.9%)。
但是当我在实验室服务器上分析我的程序时。 核函数 2 使用 41 个寄存器,持续时间为 22.94微秒。 但是内核函数 1 只使用了 37 个寄存器(甚至少了1 个)和 26.59毫秒(+15.9%)的持续时间,但我无法理解为什么核 函数2 在 2080ti 上运行时寄存器数量会增加。 然后更多的寄存器导致更好并行性并节省了时间?

另一个问题是,当我运行类似的程序时(将两个核函数稍微修改一下,设计核函数1中使用更多寄存器,核函数2保持不变)。 这次我用 1 个线程块,其中 512 个线程,启动了两个核函数。 正如我之前估计的,核函数 1 可以使用比核函数 2 更多的寄存器,并且持续时间也更少。 这个分析结果(持续时间和使用的寄存器数量的比较)符合我的估计。 但我还发现,对于相同的内核函数,例如,内核函数1在gtx 1660 ti上运行时使用43个寄存器,但在rtx 2080 ti上运行时使用60个寄存器。 是什么原因导致使用的寄存器数量突然增加很多?这是GPU自我优化的结果吗?比如在更加新的GPU上,会尽量优化,使用更多可用的寄存器。