CUDA动态并行生成文件

CUDA动态并行生成文件,c,cuda,C,Cuda,这是我第一个使用动态并行的程序,我无法编译代码。我需要能够为我在大学的研究项目运行此程序,任何帮助都将不胜感激: 我得到以下错误: /cm/shared/apps/cuda50/toolkit/5.0.35/bin/nvcc -m64 -dc -gencode arch=compute_35,code=sm_35 -rdc=true -dlink -po maxrregcount=16 -I/cm/shared/apps/cuda50/toolkit/5.0.35 -I. -I.. -I../

这是我第一个使用动态并行的程序,我无法编译代码。我需要能够为我在大学的研究项目运行此程序,任何帮助都将不胜感激:

我得到以下错误:

/cm/shared/apps/cuda50/toolkit/5.0.35/bin/nvcc -m64 -dc  -gencode arch=compute_35,code=sm_35 -rdc=true -dlink -po maxrregcount=16 -I/cm/shared/apps/cuda50/toolkit/5.0.35 -I. -I.. -I../../common/inc -o BlackScholes.o -c BlackScholes.cu
g++ -m64 -I/cm/shared/apps/cuda50/toolkit/5.0.35 -I. -I.. -I../../common/inc -o BlackScholes_gold.o -c BlackScholes_gold.cpp
g++ -m64 -o BlackScholes BlackScholes.o BlackScholes_gold.o -L/cm/shared/apps/cuda50/toolkit/5.0.35/lib64 -lcudart -lcudadevrt
BlackScholes.o: In function `__sti____cudaRegisterAll_47_tmpxft_000059cb_00000000_6_BlackScholes_cpp1_ii_c58990ec()':
tmpxft_000059cb_00000000-3_BlackScholes.cudafe1.cpp:(.text+0x1354): undefined reference to `__cudaRegisterLinkedBinary_47_tmpxft_000059cb_00000000_6_BlackScholes_cpp1_ii_c58990ec'
collect2: ld returned 1 exit status
make: *** [BlackScholes] Error 1
我有一个cpp文件,一个cu文件和一个cuh文件。我的makefile的重要部分如下:

# CUDA code generation flags
#GENCODE_SM10    := -gencode arch=compute_10,code=sm_10
GENCODE_SM20     := -gencode arch=compute_20,code=sm_20
GENCODE_SM30     := -gencode arch=compute_30,code=sm_30 -gencode arch=compute_35,code=sm_35
GENCODE_SM35     := -gencode arch=compute_35,code=sm_35
#GENCODE_FLAGS    := $(GENCODE_SM10) $(GENCODE_SM20) $(GENCODE_SM30)
GENCODE_FLAGS    := $(GENCODE_SM35)

# OS-specific build flags
ifneq ($(DARWIN),)
      LDFLAGS   := -Xlinker -rpath $(CUDA_LIB_PATH) -L$(CUDA_LIB_PATH) -lcudart -lcudadevrt
      CCFLAGS   := -arch $(OS_ARCH)
else
  ifeq ($(OS_SIZE),32)
      LDFLAGS   := -L$(CUDA_LIB_PATH) -lcudart -lcudadevrt
      CCFLAGS   := -m32
  else
      LDFLAGS   := -L$(CUDA_LIB_PATH) -lcudart -lcudadevrt
      CCFLAGS   := -m64
  endif
endif

# OS-architecture specific flags
ifeq ($(OS_SIZE),32)
      NVCCFLAGS := -m32 -dc
else
      NVCCFLAGS := -m64 -dc
endif

# Debug build flags
ifeq ($(dbg),1)
      CCFLAGS   += -g
      NVCCFLAGS += -g -G
      TARGET := debug
else
      TARGET := release
endif


# Common includes and paths for CUDA
INCLUDES      := -I$(CUDA_INC_PATH) -I. -I.. -I../../common/inc

# Additional parameters
MAXRREGCOUNT  :=  -po maxrregcount=16

# Target rules
all: build

build: BlackScholes

BlackScholes.o: BlackScholes.cu
        $(NVCC) $(NVCCFLAGS) $(EXTRA_NVCCFLAGS) $(GENCODE_FLAGS) -rdc=true -dlink $(MAXRREGCOUNT) $(INCLUDES) -o $@ -c $<

BlackScholes_gold.o: BlackScholes_gold.cpp
        $(GCC) $(CCFLAGS) $(INCLUDES) -o $@ -c $<

BlackScholes: BlackScholes.o BlackScholes_gold.o
        $(GCC) $(CCFLAGS) -o $@ $+ $(LDFLAGS) $(EXTRA_LDFLAGS)
        mkdir -p ../../bin/$(OSLOWER)/$(TARGET)
        cp $@ ../../bin/$(OSLOWER)/$(TARGET)
    enter code here

run: build
        ./BlackScholes
#CUDA代码生成标志
#GENCODE\u SM10:=-GENCODE arch=compute\u 10,code=sm\u 10
GENCODE\u SM20:=-GENCODE arch=compute\u 20,code=sm\u 20
GENCODE_SM30:=-GENCODE arch=compute_30,code=sm_30-GENCODE arch=compute_35,code=sm_35
GENCODE_SM35:=-GENCODE arch=compute_35,code=sm_35
#GENCODE_标志:=$(GENCODE_SM10)$(GENCODE_SM20)$(GENCODE_SM30)
GENCODE_标志:=$(GENCODE_SM35)
#特定于操作系统的构建标志
ifneq($(达尔文),)
LDFLAGS:=-Xlinker-rpath$(CUDA_LIB_路径)-L$(CUDA_LIB_路径)-lcudart-lcudadevrt
CCFLAGS:=-arch$(OS_arch)
其他的
ifeq($(操作系统大小),32)
LDFLAGS:=-L$(CUDA_LIB_路径)-lcudart-lcudadevrt
CCFLAGS:=-m32
其他的
LDFLAGS:=-L$(CUDA_LIB_路径)-lcudart-lcudadevrt
CCFLAGS:=-m64
恩迪夫
恩迪夫
#操作系统体系结构特定标志
ifeq($(操作系统大小),32)
NVCCFLAGS:=-m32-dc
其他的
NVCCFLAGS:=-m64-dc
恩迪夫
#调试生成标志
ifeq($(dbg),1)
CCFLAGS+=-g
NVCCFLAGS+=-g-g
目标:=调试
其他的
目标:=释放
恩迪夫
#CUDA的通用包含和路径
包括:=-I$(CUDA_公司路径)-I.-I-I.//通用/公司
#附加参数
MAXRREGCOUNT:=-po MAXRREGCOUNT=16
#目标规则
全部:构建
建造:布莱克斯科尔斯
o:BlackScholes.cu
$(NVCC)$(NVCCFLAGS)$(额外的NVCCFLAGS)$(GENCODE_标志)-rdc=true-dlink$(MAXRREGCOUNT)$(包括)-o$@-c$<
BlackScholes_gold.o:BlackScholes_gold.cpp
$(GCC)$(CCFLAGS)$(包括)-o$@-c$<
布莱克斯科尔斯:布莱克斯科尔斯。哦,布莱克斯科尔斯·金。哦
$(GCC)$(CCFLAGS)-o$@$+$(LDFLAGS)$(额外的LDFLAGS)
mkdir-p.././bin/$(OSLOWER)/$(目标)
cp$@.././bin/$(OSLOWER)/$(目标)
在这里输入代码
运行:构建
/布莱克斯科尔斯

使用主机链接器(
g++
)进行可执行文件的最终链接时,以及使用可重定位设备代码(
nvcc-dc
)时,需要执行中间设备代码链接步骤

从:


我需要在“Command”(即“nvcc-lcudadevrt”)的字符串中附加“-lcudadevrt”,然后它就可以工作了。非常感谢你的帮助,罗伯特。:-)是的,我认为还需要为中间步骤添加它,这意味着可以通过为中间(
-dlink
)链接步骤指定
$(LDFLAGS)
来修改我的Makefile。
If you want to invoke the device and host linker separately, you can do:

nvcc –arch=sm_20 –dc a.cu b.cu
nvcc –arch=sm_20 –dlink a.o b.o –o link.o
g++ a.o b.o link.o –L<path> -lcudart
GENCODE_SM35     := -gencode arch=compute_35,code=sm_35
GENCODE_FLAGS    := $(GENCODE_SM35)

LDFLAGS   := -L/usr/local/cuda/lib64 -lcudart -lcudadevrt
CCFLAGS   := -m64

NVCCFLAGS := -m64 -dc

NVCC := nvcc
GCC := g++

# Debug build flags
ifeq ($(dbg),1)
      CCFLAGS   += -g
      NVCCFLAGS += -g -G
      TARGET := debug
else
      TARGET := release
endif


# Common includes and paths for CUDA
INCLUDES      := -I/usr/local/cuda/include -I. -I..

# Additional parameters
MAXRREGCOUNT  :=  -po maxrregcount=16

# Target rules
all: build

build: BlackScholes

BlackScholes.o: BlackScholes.cu
        $(NVCC) $(NVCCFLAGS) $(EXTRA_NVCCFLAGS) $(GENCODE_FLAGS) $(MAXRREGCOUNT) $(INCLUDES) -o $@ $<
        $(NVCC) -dlink  $(GENCODE_FLAGS) $(MAXRREGCOUNT)  -o bs_link.o $@

BlackScholes_gold.o: BlackScholes_gold.cpp
        $(GCC) $(CCFLAGS) $(INCLUDES) -o $@ -c $<

BlackScholes: BlackScholes.o BlackScholes_gold.o bs_link.o
        $(GCC) $(CCFLAGS) -o $@ $+ $(LDFLAGS) $(EXTRA_LDFLAGS)

run: build
        ./BlackScholes