Compute Preemption 计算抢占
https://docs.nvidia.com/cuda/pascal-tuning-guide/index.html#preemption
Pascal whitepaper:
新的Pascal GP100 Compute Preemption功能使GPU上运行的计算任务以指令级的粒度被中断,并且它们的上下文被交换到GPU DRAM。 这样就可以交换其他应用程序并运行它们,然后再将原始任务的上下文换回以继续执行并从中断的地方继续执行。
计算抢占解决了长期运行或行为不当的应用程序可能会垄断系统的重要问题,从而导致系统在等待任务完成时无响应,可能导致任务超时和/或被任务杀死。 操作系统或CUDA驱动程序。 在Pascal之前,在计算和显示任务在同一GPU上运行的系统上,长时间运行的计算内核可能会导致OS和其他可视应用程序变得无响应且不交互,直到内核超时。 因此,程序员必须要么安装专用的仅用于计算的GPU,要么根据以前的GPU的限制仔细地编写应用程序代码,将工作负载分解为较小的执行时间片,以使它们不会超时或被操作系统杀死。
实际上,许多应用程序确实需要长时间运行的流程,并且通过GP100中的“计算抢占”功能,这些应用程序现在可以在处理大型数据集或等待特定条件发生时根据需要运行,而可视化应用程序则保持顺畅和交互性,但并不需要 以程序员为使代码在小的时间片上运行而付出的努力为代价。
计算抢占还允许在单GPU系统上交互式调试计算内核。 这是提高开发人员生产力的重要功能。 相反,开普勒GPU架构仅在计算内核中的线程块级别提供了更粗粒度的抢占。 这种块级抢占要求在硬件可以上下文切换到其他上下文之前,必须完成线程块的所有线程。 但是,当使用调试器并且在线程块内的一条指令上遇到GPU断点时,线程块未完成,从而阻止了块级抢占。 尽管开普勒和麦克斯韦仍然能够通过在编译过程中添加工具来提供调试器的核心功能,但GP100仍能够支持更强大,更轻量的调试器实现。