COSCUP 2022

ロケール設定が保存されました。pretalxでは英語のサポートが充実していると思っていますが、問題やエラーが発生した場合は、ぜひご連絡ください。

Auto-Tuning Framework for CUDA Unified Memory
2022/07/30 , TR311
言語: 漢語

利用 Opentuner 結合輕量化的 Python script,找到如何在 CUDA Code 中,添加正確的 Unified Memory Advice 以及 Prefetch,提供更便捷的程式撰寫方式,並帶來良好的效能。


傳統CUDA的 Explicit Data Movement 的方式,需要工程師自行管理 GPU 和 CPU 之間的搬運,且當資料大小超過 GPU 本身記憶體的大小時(稱之為 GPU Memory Oversubscription),則無法執行。在CUDA 6.0後,CUDA 增加了 Unified Memory (UM),將 CPU 和 GPU 的記憶體視為同一空間,工程師不再需要自行管理資料搬移。

UM 的好處是書寫程式碼上更為容易,並且支援 GPU Memory Oversubscription,然而因為其採用 On-demand Page Migration,意即當GPU需要使用資料時,才會將物件從CPU的記憶體搬移到GPU上,使效能相比之前大幅下降。為此,CUDA 提供了許多 UM 的進階 API,如 cudaMemAdvise,讓使用者可以提供 UM Driver 記憶體存取特性的提示,或是 cudaMemPrefetchAsync,讓 GPU 提前將物件預取到記憶體中。但是該如何使用這些 UM 的 API,卻也是一大難題,不正確的使用可能會讓效能更糟。

本議程將會探討 CUDA 提出的 cudaMemAdvise 以及 cudaMemPrefetchAsync 會對程式帶來什麼影響,並且闡述我們的方法,結合Opentuner開源框架,自動找到如何設定 UM 參數。如此一來,使用者除了可以同時享受 UM 帶來的書寫便利,也可以避免因使用 UM 而造成效能大幅度的下降。


Difficulty

Skilled

Target Audience

對於計算機結構、程式有基礎認識者

Hi,我是 YuweiTT,現在還是一名學生,希望可以將研究的想法,分享給大家~