如果您可以從您的mysql調用中分離出CUDA內核並將它們放在單獨的文件中,那麼您可以使用Makefile。
我把所有的CUDA內核,並在這樣的.CU文件,然後我有一個定義:
#
# CUDA Compilation Rules
#
define cuda-compile-rule
$1: $(call generated-source,$2) \
$(call source-dir-to-build-dir, $(subst .cu,.cubin, $2)) \
$(call source-dir-to-build-dir, $(subst .cu,.ptx, $2))
$(NVCC) $(CUBIN_ARCH_FLAG) $(NVCCFLAGS) $(INCFLAGS) $(DEFINES) -o [email protected] -c $$<
$(call source-dir-to-build-dir, $(subst .cu,.cubin, $2)): $(call generated-source,$2)
$(NVCC) -cubin -Xptxas -v $(CUBIN_ARCH_FLAG) $(NVCCFLAGS) $(INCFLAGS) $(DEFINES) $(SMVERSIONFLAGS) -o [email protected] $$<
$(call source-dir-to-build-dir, $(subst .cu,.ptx, $2)): $(call generated-source,$2)
$(NVCC) -ptx $(CUBIN_ARCH_FLAG) $(NVCCFLAGS) $(INCFLAGS) $(DEFINES) $(SMVERSIONFLAGS) -o [email protected] $$<
endef
我也包括易於使用的三個功能:
generated-source = $(filter %.cpp, $1) $(filter %.c, $1) $(filter %.f, $1) $(filter %.F, $1) $(filter %.cu, $1)
source-dir-to-build-dir = $(addprefix $(BUILDDIR)/, $1)
source-to-object = $(call source-dir-to-build-dir, \
$(subst .f,.o,$(filter %.f,$1)) \
$(subst .F,.o,$(filter %.F,$1)) \
$(subst .c,.o,$(filter %.c,$1)) \
$(subst .cpp,.o,$(filter %.cpp,$1)) \
$(if $(filter 1,$(USE_CUDA)),$(subst .cu,.cu.o,$(filter %.cu,$1))))
然後你需要做的是建立一個源文件列表和呼叫:
$(foreach f,$(filter %.cu, $listOfFiles),$(call cuda-compile-rule,$(call source-to-object,$f),$f))
請注意,在函數source-to-object
有一個變量,我用它來有條件地禁用CUDA編譯USE_CUDA
。
我對這個知之甚少,而且我沒有編寫我的項目的Makefile。但是,對於它的價值,快速查看我的Makefile向我顯示,我們使用nvcc來處理內核和鏈接的代碼,而我們使用gcc作爲其他代碼。即,您是否嘗試過使用gcc編譯MySQL代碼,但是使用nvcc鏈接? – jmilloy 2011-03-01 22:01:28