CUDA運行時可以編譯CUDA內核並將其鏈接到可執行文件中。這意味着您不必在應用程序中分發cubin文件,或者通過驅動程序API處理它們。正如你所指出的,它通常更易於使用。
相比之下,驅動程序API很難編程,但提供了更多的CUDA使用控制。程序員有直接處理初始化,模塊加載等
顯然更詳細的設備信息,可以通過驅動程序API查詢不是通過運行時API。例如,設備上可用的空閒內存只能通過驅動程序API查詢。
從CUDA程序員指南:
它由兩個API組成:
- 一個低級別的API調用CUDA驅動程序API,
- 更高級別的API調用CUDA運行時API,在CUDA驅動程序API的頂層實現 。
這些API是互斥的:一個應用程序應該使用其中一個或者使用 。
CUDA運行時通過提供隱式的 初始化,上下文管理和模塊管理來簡化設備代碼管理。通過NVCC生成的C主機代碼 基於CUDA運行時(見第4.2.5節),所以 應用鏈接到這個代碼必須使用CUDA運行時API。相比之下,CUDA驅動程序API需要更多的代碼,更難編程和調試,但提供了更好的控制級別,並且與語言無關,因爲它只處理cubin對象的 (請參閱第4.2.5節) 。特別是,它是使用CUDA驅動程序API 配置和啓動內核比較困難,因爲執行 配置和內核參數必須使用顯式函數調用來指定 ,而不是在4.2.3所述的執行配置語法。此外,設備 仿真(見4.5.2.9)不使用CUDA驅動程序API的工作。
API之間沒有明顯的性能差異。你的內核如何使用內存以及它們在GPU上的佈局(經線和塊)將會產生更爲明顯的效果。
來源
2008-10-31 18:55:14
mch
一個驅動程序API的優勢將是編譯器開發人員添加其他語言編寫內核支持,C. – 2009-10-21 22:12:37