2013-04-07 85 views
0

我有一個CUDA內核,我想從C文件啓動。我把內核放在一個.cu文件中,並創建了一個調用內核的包裝函數。然後我創建了一個簡單的聲明瞭包裝函數的頭文件。在我的C文件中,我包含了頭文件並調用了包裝函數。編譯CUDA文件,C文件和Cuda頭文件

如果我想將這些文件編譯爲對象然後將它們鏈接起來,我的makefile將會是什麼樣子?

+0

使用'nvcc -c'編譯所有CUDA文件和'gcc -c'來編譯C文件。之後,只需通過gcc鏈接它們。我建議你在超過2-3個文件的項目中使用'cmake'。 – 2013-04-07 06:18:15

+0

@Eddy_Em:「簡單鏈接」與gcc需要將所有CUDA運行時和驅動程序組件庫添加到鏈接語句中,這可能會非常棘手。與nvcc鏈接消除了所有的複雜性,通常是首選。 – talonmies 2013-04-07 06:31:33

回答

1

nvcc使用文件擴展名自動確定語言和編譯軌跡。所以你實際上只需要一個彙編語句,這可能是這麼簡單:

application:  foo.cu bar.c 
       nvcc $(CUDAFLAGS) -XComplier=$(CFLAGS) -Xlinker=$(LDFLAGS) -o [email protected] $^ 

[免責聲明:寫在瀏覽器中,不包含標籤,從來沒有測試,具體形式將取決於化妝的味道用於自己的風險]

定義您需要的任何CUDA特定選項CUDAFLAGS。我認爲它不會將CFLAGSLDFLAGS變量用引號括起來,但是您可能需要用一點點來試驗一下。