QT+CUDA7.5+UBUNTU14.04

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/seamanj/article/details/50155493

接着前面有篇文章介绍在windows上面对他们进行合成,这篇文章我们介绍下在ubuntu上面对其合成。


程序用的是brown大学里面snow-master,该project包括了几个项目,其中有个CUDA_helloworld刚好可以拿来练手


CUDA在ubuntu上面的安装我就不多介绍,攻略帖一大堆


下面开始介绍下这个项目


main.cpp内容如下:

#include <QCoreApplication>

extern "C" // tell compiler that function is defined somewhere else

void runCudaPart();

#include <stdio.h>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    runCudaPart();
    return a.exec();
}

kernel.cu内容如下:

#include <cuda.h>
#include <glm/glm.hpp>
#include <stdio.h>


#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ < 200)
  # error printf is only supported on devices of compute capability 2.0 and higher, please compile with -arch=sm_20 or higher
#endif

extern "C"
void runCudaPart();

__global__ void helloCUDA(glm::vec3 v)
{
    int tid = blockIdx.x;
    printf("Hello block %d thread %d, x=%f\n",tid , threadIdx.x, v.x);
}

void runCudaPart()
{
    // all your cuda code here
    glm::vec3 v(0.1f, 0.2f, 0.3f);
//    helloCUDA<<<1, 5>>>(v); // 1 block, 5 GPU threads
    helloCUDA<<<5,1>>>(v); // 5 blocks, 1 GPU thread each
    cudaDeviceSynchronize();
}


其中项目的pro文件如下:


#-------------------------------------------------
#
# Project created by QtCreator 2014-04-03T18:12:01
#
#-------------------------------------------------

QT       += core
QT       -= gui

TARGET = CUDA_helloworld
CONFIG   += console
CONFIG   -= app_bundle

TEMPLATE = app


SOURCES += main.cpp

# GLM
INCLUDEPATH += /usr/local/glm

# C++ flag
QMAKE_CXXFLAGS_RELEASE=-O3

# CUDA stuff
CUDA_SOURCES += kernel.cu

# uncomment below to also import include CUDA SDK
#CUDA_SDK = /contrib/projects/cuda-sdk/C
#INCLUDEPATH += $$CUDA_SDK/common/inc/
#INCLUDEPATH += $$CUDA_SDK/../shared/inc/
#QMAKE_LIBDIR += $$CUDA_SDK/lib
#QMAKE_LIBDIR += $$CUDA_SDK/common/lib


CUDA_DIR = /usr/local/cuda-7.5
INCLUDEPATH += $$CUDA_DIR/include
QMAKE_LIBDIR += $$CUDA_DIR/lib64
#LD_LIBRARY_PATH=$${LD_LIBRARY_PATH}:$$CUDA_DIR/lib64
#message($${LD_LIBRARY_PATH})

#$$(PATH) = $$(PATH):$$CUDA_DIR/bin
#message($$(PATH))

LIBS += -lcudart -lcuda

OTHER_FILES += \
    CUDA_notes.txt \
    kernel.cu

# GPU ARCH
# this gets passed as the gpu-architecture flag to nvcc compiler
# specifying particular architectures enable certain features, limited to the compute capability
# of the GPU. compute capabilities listed here http://en.wikipedia.org/wiki/CUDA
# MSLAB GeForce 460 seems to have compute capability 2.1
CUDA_ARCH = sm_21

# custom NVCC flags
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 = $$join(INCLUDEPATH,' -I','-I',' ')

# compile CUDA kernels using nvcc
cuda.commands = $$CUDA_DIR/bin/nvcc -m64 -g -G -arch=$$CUDA_ARCH -c $$NVCCFLAGS $$CUDA_INC $$LIBS  ${QMAKE_FILE_NAME} -o ${QMAKE_FILE_OUT} \
    2>&1 | sed -r \"s/\\(([0-9]+)\\)/:\\1/g\" 1>&2
# Prepare the extra compiler configuration (taken from the nvidia forum - i'm not an expert in this part)
cuda.input = CUDA_SOURCES
cuda.output = ${OBJECTS_DIR}${QMAKE_FILE_BASE}_cuda.o # suffix needed for this to work?
# Tell Qt that we want add more stuff to the Makefile
QMAKE_EXTRA_UNIX_COMPILERS += cuda




配置好后运行,会出现


libcudart.so.7.5: cannot open shared object file: No such file or directory



网上搜了下,解决方法如下


在shell中输入:

32-bit: sudo ldconfig /usr/local/cuda-7.5/lib

64-bit: sudo ldconfig /usr/local/cuda-7.5/lib64


cheers!



展开阅读全文

没有更多推荐了,返回首页