我在用GPU做CFD的时候发现,同样的结构网格(比如把一块结构网格剖分成很多块),网格分区增加时,GPU加速迅速降低——这个可能是多种因素的结果,但其中是否意味着kernel的调度开销其实也挺大?
NVIDIA中国区工程及解决方案总监赖俊杰:
从描述上来说,看起来用到的kernel数目并不多,到现在为止,只在一些网络甚至神经网络相关的一些博客里面看到有大量的小的up操作,当kernel数目调度非常大时,kernel调度可能会变成一个问题,但是若针对一个kernel或者说几个kernel,kernel调度的开销基本上可以忽略,它并不是解决问题规模特别大,调度的开销就越大,所以我认为更有可能是当规模变大之后,特别是cash的行为可能发生很大的变化,这可能是其中一个原因。但是总体上来说,更有可能是代码层面的一些原因,而不是说跨境调度的问题。所以我建议你可以考虑用一下Nsight,NVIDIA做性能分析的一个工具,去看下现在有的性能行为,然后评估下发生这样的问题可能是在哪个位置,然后再对代码做一些调整。