在 QtCreator (VS 2010) 中设置 CUDA v7.0
Posted
技术标签:
【中文标题】在 QtCreator (VS 2010) 中设置 CUDA v7.0【英文标题】:Set up CUDA v7.0 in QtCreator (VS 2010) 【发布时间】:2015-09-24 12:03:16 【问题描述】:有人在 QtCreator 中成功使用了最新版本的 CUDA(即设置 .pro 文件)吗?如果是这样,你能和我分享一些简单的例子或教程吗?谢谢!
遇到的问题和尝试:
我在 QtCreator 中设置和编译一个简单的 CUDA 程序时遇到了麻烦。我已经阅读了一些旧教程(即CUDA with QT in Linux),但到目前为止我还没有运气。
在上面的教程示例中,我无法让 QtCreator 自行正确构建 .cu 文件,但我最终能够使用以下 nvcc 命令行编译 .cu 文件:
nvcc -m32 --gpu-architecture=sm_20 -ccbin "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin" -I"C:/PROGRA~1/NVIDIA GPU Computing Toolkit/CUDA/v7.0/include" -lcudart -lcuda ..\CUDA_TEST_EXAMPLE\hello.cu -o ..\Release\release\obj\cuda_code_cuda.obj
于是生成了 cuda_code_cuda.obj。当我尝试在 Qt 中构建项目时,我收到一条错误消息:
error: LNK1181: cannot open input file 'C:\PROGRA~1\NVIDIA.obj'
我肯定没有正确链接到已编译的 cuda_code_cuda.obj 文件。我认为它与 CUDA 文件夹路径中的“空格”有关(双引号似乎没有多大帮助)
附加信息:我的 pro 文件如下所示:
QT += core
QT -= gui
TARGET = CUDA_TEST_EXAMPLE
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
# Define output directories
DESTDIR = release
OBJECTS_DIR = release/obj/
CUDA_OBJECTS_DIR = release/cuda
# Source files
SOURCES += main.cpp
# Cuda sources
OTHER_FILES += cuda_code.cu
# CUDA settings <-- may change depending on your system
CUDA_SOURCES += cuda_code.cu
#CUDA_DIR = "C:/PROGRA~1/NVIDIA\ GPU\ Computing\ Toolkit/CUDA/v7.0"
# Path to header and libs files
INCLUDEPATH += "C:\PROGRA~1\NVIDIA GPU Computing Toolkit\CUDA\v7.0\include"
QMAKE_LIBDIR += "C:\PROGRA~1\NVIDIA GPU Computing Toolkit\CUDA\v7.0\lib\Win32" # Note I'm using a 64 bits Operating system
# libs used in your code
LIBS += -lcudart -lcuda
cuda.output = "C:\Users\johnyang\Documents\Release\release\obj\cuda_code_cuda.obj"
LIBS += "C:\Users\johnyang\Documents\Release\release\obj\cuda_code_cuda.obj"
## Tell Qt that we want add more stuff to the Makefile
QMAKE_EXTRA_COMPILERS += cuda
【问题讨论】:
你试过解析空格吗?试试把NVIDIA GPU Computing Toolkit
换成NVIDIA~1
,我觉得qmake命令生成的Makefile会给你一些提示
这似乎解决了问题!谢谢!
我希望有人仍然可以告诉我如何设置 pro 文件,以便在构建项目时自动编译 .cu 文件。目前,它仅在我在命令行中使用 nvcc 手动构建 .cu 文件时才有效。
实际上,引用文本被视为单个项目,并且在引用文本中包含空格。因此,它与调用编译器的窗口中的外壳有关。那是因为使用 NVIDIA~1 有效。您需要解析要包含在字符串中的双引号,这在 windows 和 linux 中是不同的。
【参考方案1】:
通过一些测试,我设法将 pro 文件设置为现在可以正确编译。我发布这个作为答案只是为了分享我所得到的。但是,我仍然很好奇这是否是最新版本的 CUDA 中的方法。如果有人能跟我确认一下就好了。
QT += core
QT -= gui
TARGET = CUDA_TEST_EXAMPLE
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
QMAKE_LFLAGS_RELEASE =/NODEFAULTLIB:msvcrt.lib
QMAKE_LFLAGS_DEBUG =/NODEFAULTLIB:msvcrtd.lib
# Define output directories
DESTDIR = release
OBJECTS_DIR = release\obj
CUDA_OBJECTS_DIR = release/cuda
# Source files
SOURCES += main.cpp
# Cuda sources
#OTHER_FILES += cuda_code.cu
# CUDA settings <-- may change depending on your system
CUDA_SOURCES += cuda_code.cu
CUDA_DIR = "C:\PROGRA~1\NVIDIA~2\CUDA\v7.0" # Path to cuda toolkit install
# Path to header and libs files
INCLUDEPATH += $$CUDA_DIR/include
QMAKE_LIBDIR += $$CUDA_DIR/lib/Win32 # Note I'm using a 64 bits Operating system
# libs used in your code
LIBS += -lcudart -lcuda
## GPU architecture
CUDA_ARCH = sm_20 # Yeah! I've a new device. Adjust with your compute capability
## Here are some NVCC flags I've always used by default.
#NVCCFLAGS = --compiler-options -fno-strict-aliasing -use_fast_math --ptxas-options=-v
## Prepare the extra compiler configuration (taken from the nvidia forum - i'm not an expert in this part)
#CUDA_INC = -I"C:/PROGRA~1/NVIDIA~2/CUDA/v7.0/include"
CUDA_INC = $$join(INCLUDEPATH,' -I','-I',' ')
cuda.commands = $$CUDA_DIR/bin/nvcc -m32 --gpu-architecture=$$CUDA_ARCH -c \
$$CUDA_INC $$LIBS $QMAKE_FILE_NAME -o $QMAKE_FILE_OUT
# nvcc error printout format ever so slightly different from gcc
# http://forums.nvidia.com/index.php?showtopic=171651
cuda.dependency_type = TYPE_C # there was a typo here. Thanks workmate!
cuda.depend_command = $$(CUDA_DIR)/bin/nvcc $$CUDA_INC $QMAKE_FILE_NAME
cuda.input = CUDA_SOURCES
cuda.output = ..\Release/$$OBJECTS_DIR/$QMAKE_FILE_BASE_cuda.obj
## Tell Qt that we want add more stuff to the Makefile
QMAKE_EXTRA_COMPILERS += cuda
【讨论】:
以上是关于在 QtCreator (VS 2010) 中设置 CUDA v7.0的主要内容,如果未能解决你的问题,请参考以下文章
无法在 VS 2010 中设置 getter 和 setter
如何在 VS2010 RC 中设置我的开发 Web 浏览器?
如何在 Visual Studio 2010 中设置环境变量?