【CUDA學習筆記(三)】runtime API同步行爲及編程模式介紹(CUDA 工具手冊 v10.2.89版本)

1.runtime庫介紹

CUDA c++對c++語言的最小擴展集和一個runtime庫組成。它允許程序員將內核定義爲一個c++函數,並在每次調用該函數時使用一些新的語法來指定網格和塊維。

“runtime API”通過提供隱式初始化、上下文管理和模塊管理簡化了設備代碼管理。使得代碼更簡單,但它也缺乏“驅動程序API”所具有的控制級別。

2.GPU異構編程模式

以c語言爲例,GPU和CPU組成的異構編程模式如下圖所示:CPU成爲主機,GPU成爲設備。CPU爲核函數並行運行提供必要的變量定義、數據傳輸等工作,並行並行運算結果用於其他串行代碼,是函數的主體部分。GPU並行代碼負責執行某個特定功能,模塊式地嵌入到主體程序中。這種異構編程模式就涉及到主機與GPU設備之間的通訊等內容,在編程時有很多需要注意的地方:如設備內存開闢和釋放、數據傳輸、數據同步等。
在這裏插入圖片描述

3. runtime API的同步行爲

runtime API以同步和異步兩種形式提供memcpy/memset函數。

Memcpy

在參考文檔中,每個memcpy函數被歸類爲同步或異步,對應於下面的定義:

同步
所有涉及統一內存區域的傳輸都是與主機完全同步的。

同步情況
所有涉及統一內存區域的傳輸都是與主機完全同步的
對於從固定主機內存到設備內存的傳輸,該函數相對於主機是同步的
對於從設備到可分頁或固定主機內存的傳輸,函數只在複製完成後返回
對於從設備內存到設備內存的傳輸,不執行主機端同步
對於從任何主機內存到任何主機內存的傳輸,該函數對於主機是完全同步的

異步

異步情況
對於從設備內存到可分頁主機內存的傳輸,函數只會在複製完成後返回
對於從任何主機內存到任何主機內存的傳輸,該函數對於主機是完全同步的
對於所有其他傳輸,函數是完全異步的。如果可分頁內存必須首先被暫存到固定的內存中,這將通過工作線程異步處理

核函數啓動

內核啓動相對於主機是異步的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章