首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >迫使NVCC直接连接相

迫使NVCC直接连接相
EN

Stack Overflow用户
提问于 2020-04-12 21:32:41
回答 1查看 178关注 0票数 0

我正在移植一个GPU应用程序到Windows,使用MSVC,这似乎不太好发挥与NVCC。我已将编制和连接阶段分开。nvcc将只对cuda文件进行预处理:

代码语言:javascript
复制
nvcc -dc -ccbin cl somefile.cu

cl将编译其他所有内容:

代码语言:javascript
复制
cl anotherfile.c

这种分离是必要的,因为许多MSVC标志(这里不包括在内)并不与nvcccl.exe包装(相关症状这里)无关。

编译完成后,有两种方法可以进行链接。

  1. 使用nvcc只链接CUDA设备代码,然后按照本指南使用link.exe链接所有内容。

尽管我努力尝试,但我无法让link找到CUDA头,也找不到任何关于如何将link指向cudart库的文档。如果这和他们的g++例子一样简单就好了!

  1. nvcc来完成所有的链接。

然而,根据文档,“没有选择”跳到链接阶段。所以当我试图连接所有东西的时候,用.

代码语言:javascript
复制
nvcc somefile.o anotherfile.o -o app.exe

我收到一些来自cl的警告!

代码语言:javascript
复制
cl : Command line warning D9024 : unrecognized source file type 'somefile.o', object file assumed
cl : Command line warning D9024 : unrecognized source file type 'anotherfile.o', object file assumed

当然,nvcc假定这些对象文件是源代码,并将它们发送到cl,因为文档包括:

请注意,nvcc不区分对象、库或资源文件。

当然,cl正在抱怨--这些对象文件应该直接传递给链接器。我知道link最终会被调用,因为我向-Xlinker传递了一些无关的参数。在这些警告之后,确实会编译app.exe

尽管doc指出没有链接器阶段参数,但我如何才能强迫nvcc只链接对象,而不是不正确地将它们传递给cl呢?无法阻止这些警告(至少没有堆栈溢出社区的被谴责 )。

EN

回答 1

Stack Overflow用户

发布于 2020-04-12 22:42:26

http://github.com/fangq/mcx查看我的cuda代码

您可以在Windows 64/MSYS2终端上编译它,转到mcx/src文件夹,键入"make",这就是我看到的

代码语言:javascript
复制
nvcc -c -g -lineinfo -Xcompiler -Wall -Xcompiler "/openmp /W0" -DSAVE_DETECTORS -use_fast_math -arch=sm_30 -DMCX_TARGET_NAME='"Fermi MCX"' -DUSE_ATOMIC -use_fast_math -o mcx_core.obj  mcx_core.cu
mcx_core.cu
e:\gitroot\project\github\mcx\src\mcx_core.cu(2042) : warning C4701: potentially uninitialized local variable 'gsrcpattern' used
e:\gitroot\project\github\mcx\src\mcx_core.cu(2042) : warning C4703: potentially uninitialized local pointer variable 'gsrcpattern' used
nvcc -I/usr/local/cuda/include -I"/lib/include" -c -D_CRT_SECURE_NO_DEPRECATE -DWIN32 -Xcompiler /openmp -c -o mcx_utils.obj  mcx_utils.c
mcx_utils.c
nvcc -I/usr/local/cuda/include -I"/lib/include" -c -D_CRT_SECURE_NO_DEPRECATE -DWIN32 -Xcompiler /openmp -c -o mcx_shapes.obj  mcx_shapes.c
mcx_shapes.c
nvcc -I/usr/local/cuda/include -I"/lib/include" -c -D_CRT_SECURE_NO_DEPRECATE -DWIN32 -Xcompiler /openmp -c -o tictoc.obj  tictoc.c
tictoc.c
nvcc -I/usr/local/cuda/include -I"/lib/include" -c -D_CRT_SECURE_NO_DEPRECATE -DWIN32 -Xcompiler /openmp -c -o mcextreme.obj  mcextreme.c
mcextreme.c
nvcc -I/usr/local/cuda/include -I"/lib/include" -c -D_CRT_SECURE_NO_DEPRECATE -DWIN32 -Xcompiler /openmp -c -o cjson/cJSON.obj  cjson/cJSON.c
cJSON.c
nvcc mcx_core.obj mcx_utils.obj mcx_shapes.obj tictoc.obj mcextreme.obj cjson/cJSON.obj -o ../bin/mcx -L"/lib/x64" -lcudart -Xcompiler /openmp
mcx_core.obj
mcx_utils.obj
mcx_shapes.obj
tictoc.obj
mcextreme.obj
cJSON.obj
   Creating library ../bin/mcx.lib and object ../bin/mcx.exp

它编译每个c单元,并按预期链接.obj文件,我不认为有任何问题。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61178458

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档