gpt4 book ai didi

mysql - CUDA、MySQL 和 CMake

转载 作者:行者123 更新时间:2023-11-29 00:57:51 25 4
gpt4 key购买 nike

我正在尝试创建一个 CUDA 程序(我是新手),它涉及首先从远程 MySQL 数据库中获取信息。在 CUDA 调用之前,我在程序内部使用 MySQL 网站的 Connector/C 库。

在使用 gcc(没有任何 CUDA 代码)时,我可以使用 MySQL 编译我的程序,但不能使用 nvcc(CUDA 编译器)。一位熟悉 CUDA 的同行向我提到,他必须编译一些他正在用 nvcc 做的 libjpg 东西,以避免“错误的架构”和链接问题。他建议我用 nvcc 编译 Connector/C 库。但是,Connector/C 库使用 CMake 而不是常规 Makefile。

因此,作为 CMake 的新手,我研究了一些东西并找到了听起来很像我需要的工具链文件(在此处找到)。但是,我在编译过程中遇到了问题,其中不包括 Connector/C 中使用的所有默认包含和库。具体

-- Looking for include files HAVE_ALLOCA_H
-- Looking for include files HAVE_ALLOCA_H - not found.

-- Looking for strstr
-- Looking for strstr - not found

这些只是几个例子,还有更多的文件没有找到。我是否正确地处理了这个问题?有没有更明显的解决方法,我只是没有考虑?如果我尝试使用 CUDA 编译 MySQL Connector/C 是正确的,是否有任何关于正确包含 Connector/C 所需的文件和库的建议?

感谢您的帮助。

最佳答案

如果您可以从 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 $$@ -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 $$@ $$<

$(call source-dir-to-build-dir, $(subst .cu,.ptx, $2)): $(call generated-source,$2)
$(NVCC) -ptx $(CUBIN_ARCH_FLAG) $(NVCCFLAGS) $(INCFLAGS) $(DEFINES) $(SMVERSIONFLAGS) -o $$@ $$<
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

关于mysql - CUDA、MySQL 和 CMake,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5157826/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com