gpt4 book ai didi

c++ - 动态包含一个 CUDA 文件

转载 作者:行者123 更新时间:2023-11-28 06:47:53 26 4
gpt4 key购买 nike

我的一个应用程序有两个求解器,一个用 C 语言,另一个用 CUDA。 Makefile 检测 nvcc 是否可用并自动切换为使用 CUDA 求解器。否则,它应该使用 C 求解器。

我只想在检测到 nvcc 时包含 CUDA 求解器的头文件,所以我在 main.cpp 文件中这样做了:

#if (NVCC_TEST == nvcc)
#include "utilCUDA.h"
#endif

NVCC_TEST 在 Makefile 中声明如下:

NVCC_RESULT := $(shell which nvcc 2> NULL)
NVCC_TEST := $(notdir $(NVCC_RESULT))

问题是主文件包含 utilCUDA.h,即使系统中没有 nvcc。有什么想法吗?

最佳答案

编译时,make 环境中定义的变量不会自动显示在源代码级别。引用this question/answer ,在您为 CUDA 与非 CUDA 使用设置 make 变量的 Makefile 部分中,执行以下操作:

        NVCC_RESULT := $(shell which nvcc 2> NULL)
NVCC_TEST := $(notdir $(NVCC_RESULT))
ifeq ($(NVCC_TEST),nvcc)
CC := nvcc
CCFLAGS := -DUSE_CUDA
else
CC := g++
CCFLAGS := -DNO_CUDA
endif

然后,无论在 Makefile 中指定编译命令的哪个位置,都将 $(CCFLAGS) 添加到编译命令行。在该命令行中编译的任何源代码都将看到该定义。

然后在您的源代码中,您可以:

#ifdef USE_CUDA
#include "utilCUDA.h"
#endif

#ifdef NO_CUDA
// whatever else you want to do.
#endif

顺便说一句,如果您尝试使用nvcc 编译.cpp 文件,您可能不会获得预期的结果。如果您需要这样做,请使用 nvcc -x cu option当您指定编译命令时。

关于c++ - 动态包含一个 CUDA 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24620557/

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