Compute Preemption 計(jì)算搶占
https://docs.nvidia.com/cuda/pascal-tuning-guide/index.html#preemption
Pascal whitepaper:
??新的Pascal GP100 Compute Preemption功能使GPU上運(yùn)行的計(jì)算任務(wù)以指令級(jí)的粒度被中斷,并且它們的上下文被交換到GPU DRAM丑瞧。 這樣就可以交換其他應(yīng)用程序并運(yùn)行它們惶桐,然后再將原始任務(wù)的上下文換回以繼續(xù)執(zhí)行并從中斷的地方繼續(xù)執(zhí)行。
??計(jì)算搶占解決了長期運(yùn)行或行為不當(dāng)?shù)膽?yīng)用程序可能會(huì)壟斷系統(tǒng)的重要問題薯酝,從而導(dǎo)致系統(tǒng)在等待任務(wù)完成時(shí)無響應(yīng)腿堤,可能導(dǎo)致任務(wù)超時(shí)和/或被任務(wù)殺死椰憋。 操作系統(tǒng)或CUDA驅(qū)動(dòng)程序腕唧。 在Pascal之前或辖,在計(jì)算和顯示任務(wù)在同一GPU上運(yùn)行的系統(tǒng)上,長時(shí)間運(yùn)行的計(jì)算內(nèi)核可能會(huì)導(dǎo)致OS和其他可視應(yīng)用程序變得無響應(yīng)且不交互枣接,直到內(nèi)核超時(shí)孝凌。 因此,程序員必須要么安裝專用的僅用于計(jì)算的GPU月腋,要么根據(jù)以前的GPU的限制仔細(xì)地編寫應(yīng)用程序代碼,將工作負(fù)載分解為較小的執(zhí)行時(shí)間片瓣赂,以使它們不會(huì)超時(shí)或被操作系統(tǒng)殺死榆骚。
??實(shí)際上,許多應(yīng)用程序確實(shí)需要長時(shí)間運(yùn)行的流程煌集,并且通過GP100中的“計(jì)算搶占”功能妓肢,這些應(yīng)用程序現(xiàn)在可以在處理大型數(shù)據(jù)集或等待特定條件發(fā)生時(shí)根據(jù)需要運(yùn)行,而可視化應(yīng)用程序則保持順暢和交互性苫纤,但并不需要 以程序員為使代碼在小的時(shí)間片上運(yùn)行而付出的努力為代價(jià)碉钠。
??計(jì)算搶占還允許在單GPU系統(tǒng)上交互式調(diào)試計(jì)算內(nèi)核纲缓。 這是提高開發(fā)人員生產(chǎn)力的重要功能。 相反喊废,開普勒GPU架構(gòu)僅在計(jì)算內(nèi)核中的線程塊級(jí)別提供了更粗粒度的搶占祝高。 這種塊級(jí)搶占要求在硬件可以上下文切換到其他上下文之前,必須完成線程塊的所有線程污筷。 但是工闺,當(dāng)使用調(diào)試器并且在線程塊內(nèi)的一條指令上遇到GPU斷點(diǎn)時(shí),線程塊未完成瓣蛀,從而阻止了塊級(jí)搶占陆蟆。 盡管開普勒和麥克斯韋仍然能夠通過在編譯過程中添加工具來提供調(diào)試器的核心功能,但GP100仍能夠支持更強(qiáng)大惋增,更輕量的調(diào)試器實(shí)現(xiàn)叠殷。