Unbutn20+cuda11+Qt下配置

首先装CUDA,具体查看其它博客,这里主要介绍如何配置。

CONFIG += console
TARGET = test

# Define output directories
CUDA_OBJECTS_DIR = ./

# This makes the .cu files appear in your project
CUDA_SOURCES += \
    kernel.cu


CUDA_DIR = "/usr/local/cuda"
CUDA_RUNTIME = "/usr/local/cuda-11.0/targets/x86_64-linux"

# CUDA settings
SYSTEM_TYPE = 64                   # '32' or '64', depending on your system
NVCC_OPTIONS = --use_fast_math

#CUDA_ARCH = sm_50                   # Type of CUDA architecture

# https://arnon.dk/matching-sm-architectures-arch-and-gencode-for-various-nvidia-cards/
CUDA_ARCH = -gencode arch=compute_61,code=sm_61 \     # for Pascal architecture
            -gencode arch=compute_75,code=sm_75 \     # for Turing architecture
            -gencode arch=compute_75,code=compute_75

# include paths
INCLUDEPATH += $$CUDA_RUNTIME/include \
               $$CUDA_DIR/include \

# library directories
CUDA_OBJECTS_DIR = ./
CUDA_LIBS += -L$$CUDA_DIR/lib64 -lcudart -lcusolver -lcuda -lcufft -lcublas -lcurand -lcudnn -lnvidia-ml -lstdc++
QMAKE_LIBDIR += $$CUDA_LIBS

# The following makes sure all path names (which often include spaces) are put between quotation marks
CUDA_INC = $$join(INCLUDEPATH,'" -I"','-I"','"')
LIBS += $$CUDA_LIBS



# Configuration of the Cuda compiler
CONFIG(debug, debug|release) {
    # Debug mode
    cuda_d.input = CUDA_SOURCES
    cuda_d.output = $$CUDA_OBJECTS_DIR/${QMAKE_FILE_BASE}_cuda.obj
    cuda_d.commands = $$CUDA_DIR/bin/nvcc -D_DEBUG $$NVCC_OPTIONS $$CUDA_INC \
                      --machine $$SYSTEM_TYPE $$CUDA_ARCH \
                      -c -o ${QMAKE_FILE_OUT} ${QMAKE_FILE_NAME}

    cuda_d.dependency_type = TYPE_C
    QMAKE_EXTRA_COMPILERS += cuda_d
}
else {
    # Release mode CUDA settings
    cuda_d.input = CUDA_SOURCES
    cuda_d.output = $$CUDA_OBJECTS_DIR/${QMAKE_FILE_BASE}_cuda.obj
    cuda_d.commands = $$CUDA_DIR/bin/nvcc  $$NVCC_OPTIONS $$CUDA_INC  \
                      --machine $$SYSTEM_TYPE $$CUDA_ARCH \
                      -c -o ${QMAKE_FILE_OUT} ${QMAKE_FILE_NAME}

    cuda_d.dependency_type = TYPE_C
    QMAKE_EXTRA_COMPILERS += cuda_d
}

SOURCES += \
    main.cpp


然后创建两个file,main.cpp和kernal.cu
main.cpp

#include <QtCore/QCoreApplication>

extern "C" void runCudaPart();

int main(int argc, char *argv[]) {
  printf("hello");
  runCudaPart();
}

kernal.cu

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

#include <cuda_runtime.h>

#include <stdio.h>

extern "C"
    //Adds two arrays
    void runCudaPart();


__global__ void addAry( int * ary1, int * ary2 )
{
    int indx = threadIdx.x;
    ary1[ indx ] += ary2[ indx ];
}


// Main cuda function

void runCudaPart() {

    int ary1[32];
    int ary2[32];
    int res[32];

    for( int i=0 ; i<32 ; i++ )
    {
        ary1[i] = i;
        ary2[i] = 2*i;
        res[i]=0;
    }
    int * d_ary1, *d_ary2;
    cudaMalloc((void**)&d_ary1, 32*sizeof(int));
    cudaMalloc((void**)&d_ary2, 32*sizeof(int));
    cudaMemcpy((void*)d_ary1, (void*)ary1, 32*sizeof(int), cudaMemcpyHostToDevice);
    cudaMemcpy((void*)d_ary2, (void*)ary2, 32*sizeof(int), cudaMemcpyHostToDevice);
    addAry<<<1,32>>>(d_ary1,d_ary2);

    cudaMemcpy((void*)res, (void*)d_ary1, 32*sizeof(int), cudaMemcpyDeviceToHost);
    for( int i=0 ; i<32 ; i++ )
        printf( "result[%d] = %d\n", i, res[i]);
    cudaFree(d_ary1);
    cudaFree(d_ary2);
}

这是编译成功后的信息

21:37:56: Running steps for project cudalearn1...
21:37:56: Configuration unchanged, skipping qmake step.
21:37:56: Starting: "/usr/bin/make" -j12
/opt/Qt5.13.0/5.13.0/gcc_64/bin/qmake -o Makefile ../cudalearn1/cudalearn1.pro -spec linux-g++ CONFIG+=qtquickcompiler
/usr/local/cuda/bin/nvcc --use_fast_math -I"/usr/local/cuda-11.0/targets/x86_64-linux/include" -I"/usr/local/cuda/include" -L/usr/local/cuda/lib64 -lcudart -lcusolver -lcuda -lcufft -lcublas -lcurand -lcudnn -lnvidia-ml -lstdc++ --machine 64 -gencode arch=compute_61,code=sm_61 -gencode arch=compute_75,code=sm_75 -gencode arch=compute_75,code=compute_75 -c -o kernel_cuda.obj ../cudalearn1/kernel.cu
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -fPIC -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -I../cudalearn1 -I. -I/usr/local/cuda-11.0/targets/x86_64-linux/include -I/usr/local/cuda/include -I/opt/Qt5.13.0/5.13.0/gcc_64/include -I/opt/Qt5.13.0/5.13.0/gcc_64/include/QtGui -I/opt/Qt5.13.0/5.13.0/gcc_64/include/QtCore -I. -isystem /usr/include/libdrm -I/opt/Qt5.13.0/5.13.0/gcc_64/mkspecs/linux-g++ -o main.o ../cudalearn1/main.cpp

g++ -Wl,-O1 -Wl,-rpath,/opt/Qt5.13.0/5.13.0/gcc_64/lib -o test kernel_cuda.obj main.o   -L-L/usr/local/cuda/lib64 -L-lcudart -L-lcusolver -L-lcuda -L-lcufft -L-lcublas -L-lcurand -L-lcudnn -L-lnvidia-ml -L-lstdc++ -L/usr/local/cuda/lib64 -lcudart -lcusolver -lcuda -lcufft -lcublas -lcurand -lcudnn -lnvidia-ml -lstdc++ /opt/Qt5.13.0/5.13.0/gcc_64/lib/libQt5Gui.so /opt/Qt5.13.0/5.13.0/gcc_64/lib/libQt5Core.so -lGL -lpthread   
21:37:57: The process "/usr/bin/make" exited normally.
21:37:57: Elapsed time: 00:01.

运行的时候只能在release下运行,有些童鞋在debug下一运行,程序就崩溃,就是在qt下debug运行内存段错误了,非要debug下运行,那么就在debug编译后去命令行去运行。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值