工具包支援動态并行:
在CUDA代碼中包含裝置運作時API:
與主機端運作時API類似,CUDA裝置運作時API的原型在程式編譯期間自動包含在内。 沒有必要明确包含cuda_device_runtime_api.h。
編譯和連結:
在使用nvcc編譯時,CUDA程式會自動與主機運作時庫連結,但裝置運作時作為靜态庫提供,必須明确地将其與希望使用它的程式連結。
裝置運作時以靜态庫的形式提供(Windows上的cudadevrt.lib,Linux和MacOS下的libcudadevrt.a),使用裝置運作時的GPU應用程式必須與之連結。 裝置庫的連結可以通過nvcc和/或nvlink完成。 下面顯示了兩個簡單的例子。
如果可以從指令行指定所有必需的源檔案,則可以在一個步驟中編譯和連結裝置運作時程式:
也可以先将CUDA .cu源檔案編譯為目标檔案,然後将這些檔案連接配接在一起分為兩個階段:
請參閱CUDA驅動程式編譯器NVCC指南的使用單獨編譯部分了解更多詳細資訊。
程式設計指南:
裝置運作時間是主機運作時間的一個功能子集。 API級裝置管理,核心啟動,裝置memcpy,流管理和事件管理從裝置運作時暴露出來。
對于已經具有CUDA經驗的人員,裝置運作時程式設計應該很熟悉。 裝置運作時文法和語義與主機API的文法和語義基本相同,本文檔前面詳細介紹了任何例外情況。
以下示例顯示了一個包含動态并行性的簡單Hello World程式:
這個程式可以在指令行的單個步驟中建構,如下所示:
性能:
同步:
即使其他線程本身不調用cudaDeviceSynchronize(),一個線程同步也會影響同一個線程塊中其他線程的性能。 這種影響将取決于基礎實施。
支援動态并行機制的核心開銷:
在控制動态啟動時處于活動狀态的系統軟體可能會對當時正在運作的任何核心施加開銷,無論它是否調用其自己的核心啟動。 這種開銷是由裝置運作時的執行跟蹤和管理軟體産生的,并且與從主機側相比,可能導緻例如由裝置進行庫調用時的性能下降。 總的來說,這種開銷是針對與裝置運作時庫連結的應用程式而産生的。