COSCUP 2022

Your locale preferences have been saved. We like to think that we have excellent support for English in pretalx, but if you encounter issues or errors, please contact us!

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

利用 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,現在還是一名學生,希望可以將研究的想法,分享給大家~