3.9 增加GPU任务并行
在图3-10中,放大主机-设备的追踪数据,可以看出在一些内核启动和开始执行内核间有时间差。此外,因为同步主机与GPU间的数据拷贝,所以GPU依旧有时空闲。使用CUDA流引入异步GPU活动,来确保PIConGPU可以向GPU发送更多的任务,让GPU找出最好的处理方式。图3-11显示了使用CUDA流的结果。现在每个主机线程都使用CUDA流(每个GPU有5个流),一个流负责主机与GPU间的数据拷贝,剩下的流负责向GPU提交并发任务。
为了在GPU上实现极高水平的并发性,PIConGPU实现了一个内部事件系统,可以自动触发活动和映射数据依赖关系。这个事件系统转换为CUDA事件,所以即使输入数据仍在传输也可以启动内核。因此,PIConGPU可以扩展到非常多的GPU上执行,并且仍然保持非常高的GPU利用率。PIConGPU及其改进版本经常在OLCF Titan上整个系统运行,并且在2013年入围戈登贝尔奖(Bussmann et al., 2013)。