2016-02-11 98 views
0

我正在寫一個執行cuda內核的單個頭文件庫。我想知道是否有辦法解決這個問題,或者從nvcc獲得C源代碼輸出?我可以在我的主機代碼上使用cuda而不使用nvcc嗎?

+2

您可以避免必須通過將內核編譯爲CUBIN或PTX文件來調用nvcc,然後使用驅動程序API加載並執行此操作,最終將調用運行時API的'<<<...> >>'語法調用替換爲['cuLaunchKernel'](http://docs.nvidia.com/cuda/cuda-driver-api/group__CUDA__EXEC.html#group__CUDA__EXEC_1gb8f3dc3031b40da29d5f9a7139e52e15)。 (如果這足夠了,我會詳細說明它並將其轉換爲答案) – Marco13

+3

一句答案是「使用CUDA驅動程序API」。 – talonmies

+0

謝謝,那就是我一直在尋找的! –

回答

4

您可以使用CUDA driver API來避免主機語言擴展。它稍微冗長一點,你需要更多的樣板代碼來管理上下文,但這並不難。

通常情況下,您可以編譯爲PTX或二進制有效負載以在運行時加載,但是NVIDIA現在還提供了一個實驗JIT CUDA C編譯器庫libNVVM,如果您想從源代碼獲取JIT,則可以嘗試。

+0

如果仍然想依賴運行時API,還不夠:在主機代碼中使用cuLaunchKernel,手動包含正確的運行時頭文件,使用nvcc來鏈接設備和主機代碼? – pszilard

+1

@pszilard:不。運行時API依賴大量nvcc生成的樣板文件和幾個未公開的API調用來執行惰性上下文初始化工作。如果你不使用nvcc進行編譯,你不會得到這個,沒有任何工作。除非您使用驅動程序API並自己明確管理上下文和模塊。 – talonmies

相關問題