c++ - 在 QtCreator (VS 2010) 中设置 CUDA v7.0

标签 c++ windows visual-studio-2010 cuda qt-creator

有没有人在 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

最佳答案

通过一些测试,我现在设法设置 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

关于c++ - 在 QtCreator (VS 2010) 中设置 CUDA v7.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31261135/

相关文章:

java - 在新的 Android 应用程序中使用大型引用项目

windows - 如何创建任何用户登录系统时运行的计划任务

xml - 以编程方式修改 .csproj 文件

c++ - 在 Visual Studio2010 中通过 C++ 优化(由编译器完成)的无限循环示例

c++ - 我怎样才能在 C 中获得 Linux 中的绝对鼠标位置

c++命名空间最佳实践困境

python - C-contiguous fashion在caffe blob存储中意味着什么?

Windows 上的 Python PIP 安装缺少子目录?

c++ - 在 C++ 中将父窗体的引用传递给子 UserControl

asp.net - 在与 ASP.Net 应用程序相同的端口上启动 .Net Web 服务