Ubuntu18.04在Qt下编译cuda相关代码

本文记录如何在Qt中编译cuda文件

  1. 在创建完Qt项目后,通过终端在工程下新建两个文件,hello.cu和hello.h
  2. 修改.pro文件,在文件中增加以下内容:
#cuda库
LIBS += -L"/usr/local/lib" \
    -L"/usr/local/cuda/lib64" \
    -lcudart \
    -lcufft

DEPENDPATH += .

#你所编写的cuda文件#######
OTHER_FILES += hello.cu

CUDA_SOURCES += hello.cu

CUDA_SDK = "/usr/local/cuda-10.2"   # Path to cuda SDK install
CUDA_DIR = "/usr/local/cuda-10.2"   # Path to cuda toolkit install


NVCC_OPTIONS = --use_fast_math

INCLUDEPATH += $$CUDA_DIR/include
QMAKE_LIBDIR += $$CUDA_DIR/lib64/


CUDA_OBJECTS_DIR = .

CUDA_LIBS = cudart cufft
CUDA_INC = $$join(INCLUDEPATH,'" -I"','-I"','"')
NVCC_LIBS = $$join(CUDA_LIBS,' -l','-l', '')

CONFIG(debug, debug|release) {
    # Debug mode
    cuda_d.input = CUDA_SOURCES
    cuda_d.output = $$CUDA_OBJECTS_DIR/${QMAKE_FILE_BASE}_cuda.o
    cuda_d.commands = $$CUDA_DIR/bin/nvcc -c -o ${QMAKE_FILE_OUT} ${QMAKE_FILE_NAME}
    cuda_d.dependency_type = TYPE_C
    QMAKE_EXTRA_COMPILERS += cuda_d
}
else {
    # Release mode
    cuda_d.input = CUDA_SOURCES
    cuda_d.output = $$CUDA_OBJECTS_DIR/${QMAKE_FILE_BASE}_cuda.o
    #cuda_d.commands = $$CUDA_DIR/bin/nvcc -D_DEBUG $$NVCC_OPTIONS $$CUDA_INC $$NVCC_LIBS --machine $$SYSTEM_TYPE -arch=$$CUDA_ARCH -c -o ${QMAKE_FILE_OUT} ${QMAKE_FILE_NAME}
    cuda_d.commands = $$CUDA_DIR/bin/nvcc -c -o ${QMAKE_FILE_OUT} ${QMAKE_FILE_NAME}
    cuda_d.dependency_type = TYPE_C
    QMAKE_EXTRA_COMPILERS += cuda_d
}

其中有两处比较重要,第一处是Cuda库的路径一定要添加,不添加的话后面编译会报错,找不到cuda相关的一些函数;另外一个就是cuda_d.commands这个变量,编译cuda文件的时候就是执行该变量的内容。编写完成pro文件以后,项目的工程列表如下图所示。
Ubuntu18.04在Qt下编译cuda相关代码_第1张图片
其余文件代码如下所示
hello.cu:

#include "hello.h"
#include "stdio.h"

__global__ void kernel(void)
{

}

void hello_test(void)
{
    printf("enter kernel function!\n");
    kernel<<<1,1>>>();
    printf("exit kernel function!\n");
}

hello.h

#ifndef __HELLO_H__
#define __HELLO_H__

void hello_test(void);

#endif

main.cpp

#include "mainwindow.h"

#include 

#include "hello.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    hello_test();
    w.show();
    return a.exec();
}

注意:虽然hello.cu文件依然会显示报错,但是不会影响编译
编译完成并运行后,关闭窗口后会发现输出界面已经打印了enter kernel和exit kernel信息,到此,就完成了在Qt上编译.cu文件
在这里插入图片描述

致谢:https://blog.csdn.net/weixin_30563917/article/details/97890996

你可能感兴趣的:(qt,cuda,ubuntu)