在Ubuntu 12.04上集成CUDA和Qt

时间:2012-05-27 17:59:49

标签: qt cuda

我正在尝试将Qt与CUDA集成。我正在研究Ubuntu 12.04。我已经安装了CUDA和Qt。

我按照这里的步骤 - 'linker input file unused because linking not done' when trying to setup QT creator & Cuda

然而它仍然给我一个错误。

我是这样做的。

我在我的主目录中创建了一个名为“CUDA2”的空Qt项目。

我添加了以下文件

cuda_interface.cu

// CUDA-C includes
#include <cuda.h>


extern "C"
void runCudaPart();

// Main cuda function

void runCudaPart() {

// all your cuda code here *smile*

}

的main.cpp

#include <QtCore/QCoreApplication>

extern "C"
void runCudaPart();

int main(int argc, char *argv[]) {

    QCoreApplication a(argc, argv);

    runCudaPart();

    return a.exec();

}

我将以下行添加到.pro文件

QT += core
QT -= gui

TARGET = cuda2
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
# Source files for C/C++ compiler
SOURCES += main.cpp
# project build directories
DESTDIR = $$system(pwd)
OBJECTS_DIR = $$DESTDIR/Obj
# and C/C++ flags
QMAKE_CFLAGS_RELEASE =-O3
QMAKE_CXXFLAGS_RELEASE =-O3
# cuda source
CUDA_SOURCES += cuda_interface.cu
# Path to cuda toolkit install
CUDA_DIR = /usr/local/cuda
INCLUDEPATH += $$CUDA_DIR/include
QMAKE_LIBDIR += $$CUDA_DIR/lib
# GPU architecture
CUDA_ARCH = sm_20
# NVCC flags
NVCCFLAGS = --compiler-options -fno-strict-aliasing -use_fast_math --ptxas-options=-v
# Path to libraries
LIBS += -lcudart -lcuda
# join the includes in a line
CUDA_INC = $$join(INCLUDEPATH,' -I','-I',' ')
cuda.commands = $$CUDA_DIR/bin/nvcc -m64 -O3 -arch=$$CUDA_ARCH -c $$NVCCFLAGS $$CUDA_INC $$LIBS ${QMAKE_FILE_NAME} -o ${QMAKE_FILE_OUT}
cuda.dependcy_type = TYPE_C
cuda.depend_command = $$CUDA_DIR/bin/nvcc -O3 -M $$CUDA_INC $$NVCCFLAGS      ${QMAKE_FILE_NAME}

cuda.input = CUDA_SOURCES
cuda.output = ${OBJECTS_DIR}${QMAKE_FILE_BASE}_cuda.o
# Tell Qt that we want add more stuff to the Makefile
QMAKE_EXTRA_COMPILERS += cuda

我运行qmake来生成makefile。当我点击'build'时,我收到此错误 -

13:33:35: Running build steps for project CUDA2...
13:33:35: Configuration unchanged, skipping qmake step.
13:33:35: Starting: "/usr/bin/make" -w
make: Entering directory `/home/alex/CUDA2'
Makefile:541: warning: overriding commands for target `Obj/main.o'
Makefile:538: warning: ignoring old commands for target `Obj/main.o'
/usr/local/cuda/bin/nvcc -m64 -O3 -arch=sm_20 -c --compiler-options -fno-strict-aliasing     -use_fast_math --ptxas-options=-v -I/usr/local/cuda/include -lcudart -lcuda    cuda_interface.cu -o Obj/cuda_interface_cuda.o
ptxas info    : Compiling entry function '__cuda_dummy_entry__' for 'sm_20'
ptxas info    : Used 2 registers, 32 bytes cmem[0]
g++ -c -pipe -O3 -Wall -W -D_REENTRANT -DQT_WEBKIT -DQT_NO_DEBUG -DQT_CORE_LIB -      DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -  I/usr/include/qt4 -I/usr/local/cuda/include -I. -o Obj/main.o main.cpp
gcc -c -pipe -O3 -Wall -W -D_REENTRANT -DQT_WEBKIT -DQT_NO_DEBUG -DQT_CORE_LIB -   DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -   I/usr/include/qt4 -I/usr/local/cuda/include -I. -o Obj/cuda_interface.o cuda_interface.cu
gcc: warning: cuda_interface.cu: linker input file unused because linking not done
g++ -Wl,-O1 -o cuda2 Obj/cuda_interface_cuda.o Obj/main.o Obj/main.o   Obj/cuda_interface.o    -L/usr/local/cuda/lib -L/usr/lib/x86_64-linux-gnu -lcudart -lcuda -  lQtCore -lpthread 
g++: error: Obj/cuda_interface.o: No such file or directory
make: *** [cuda2] Error 1
make: Leaving directory `/home/alex/CUDA2'
13:33:36: The process "/usr/bin/make" exited with code 2.
Error while building project CUDA2 (target: Desktop) 
When executing build step 'Make'

我不确定.pro文件是否适用于Linux。看起来它是为OSX制作的。 另外,我不知道CUDA_ARCH = sm_20这条线是否正确。有没有办法找到我的gpu架构?我使用的是NVIDIA Quadro FX 380M

我做错了什么?

谢谢!

2 个答案:

答案 0 :(得分:3)

根据评论,您的.pro文件存在一些“常见错误”。

首先,CUDA工具包将库目录分开为32位和64位。因此,您需要按如下方式调整QMAKE_LIBDIR:

QMAKE_LIBDIR += $$CUDA_DIR/lib64 # for 64bits operating system

QMAKE_LIBDIR += $$CUDA_DIR/lib # for 32bits operating system

不要将.cu文件作为SOURCES包含在.pro文件中,因为它们不是用g ++编译的。您的问题的.pro文件没有显示这种情况,但您评论说.t文件在Qt中的项目中删除了它们。

最后,为确保所有更改生效,请在QT Creator IDE菜单中执行以下操作:

  1. 构建 - &gt;清洁项目#清理旧东西
  2. 构建 - &gt;运行qmake#以进行.pro更改
  3. 构建 - &gt;建设项目#明显
  4. PS:正如@a​​land评论的那样,你的GPU设备计算能力是1.2,所以调整CUDA_ARCH = sm_12。

答案 1 :(得分:0)

  1. 这是问题所在:

    g ++:错误:Obj / cuda_interface.o:没有这样的文件或目录

  2. 我会删除您的所有CUDA源代码和库,确保所有内容完全 clean ,并从头开始重新安装

  3. 这是一个很好的指南:

    http://laurencedawson.com/ubuntu-11.10-and-cuda-4.1

    &lt; =假设您已经安装了Ubuntu和NVidia驱动程序,那么只需重新安装并重建CUDA工具包和源代码。

  4. 忘记Qt并忘记你的图形IDE,直到你开始工作。

    请从命令行重新安装并重建CUDA。

  5. 确保在返回Qt和IDE之前可以从命令行运行“deviceQuery”。

  6. 另一个好资源:

    http://developer.download.nvidia.com/compute/DevZone/docs/html/C/doc/CUDA_C_Getting_Started_Linux.pdf