首页 > 系统相关 >Ubuntu上使用QT creator运行cuda程序

Ubuntu上使用QT creator运行cuda程序

时间:2024-05-31 14:35:03浏览次数:21  
标签:QT creator int void ary1 ary2 CUDA Ubuntu cuda

突发奇想想尝试一下QT界面中使用CUDA加速过的程序,然后查了一下资料,总结一下有以下几点吧

1、CUDA配置全部放在.pro文件中

2、main.cpp为主函数使用g++编译

3、kernel.cu为核函数使用nvcc编译

不多说上代码


以下为main.cpp代码

    #include <QtCore/QCoreApplication>
     
    extern "C"
    void runCudaPart();
     
    int main(int argc, char *argv[])
    {
        runCudaPart();
    }

以下为kernel.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);
    }


以下为配置文件cudaQT.pro

QT       += core

QT       -= gui

TARGET = cudaQTS
CONFIG   += console
CONFIG   -= app_bundle

TEMPLATE = app


SOURCES += main.cpp


# This makes the .cu files appear in your project
OTHER_FILES +=  ./kernel.cu

# CUDA settings <-- may change depending on your system
CUDA_SOURCES += ./kernel.cu
CUDA_SDK = "/usr/local/cuda-7.5/"   # Path to cuda SDK install
CUDA_DIR = "/usr/local/cuda-7.5/"            # Path to cuda toolkit install

# DO NOT EDIT BEYOND THIS UNLESS YOU KNOW WHAT YOU ARE DOING....

SYSTEM_NAME = ubuntu         # Depending on your system either 'Win32', 'x64', or 'Win64'
SYSTEM_TYPE = 64            # '32' or '64', depending on your system
CUDA_ARCH = sm_50           # Type of CUDA architecture, for example 'compute_10', 'compute_11', 'sm_10'
NVCC_OPTIONS = --use_fast_math


# include paths
INCLUDEPATH += $$CUDA_DIR/include

# library directories
QMAKE_LIBDIR += $$CUDA_DIR/lib64/

CUDA_OBJECTS_DIR = ./


# Add the necessary libraries
CUDA_LIBS = -lcuda -lcudart

# The following makes sure all path names (which often include spaces) are put between quotation marks
CUDA_INC = $$join(INCLUDEPATH,'" -I"','-I"','"')
#LIBS += $$join(CUDA_LIBS,'.so ', '', '.so')
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.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.dependency_type = TYPE_C
    QMAKE_EXTRA_COMPILERS += cuda_d
}
else {
    # Release mode
    cuda.input = CUDA_SOURCES
    cuda.output = $$CUDA_OBJECTS_DIR/${QMAKE_FILE_BASE}_cuda.o
    cuda.commands = $$CUDA_DIR/bin/nvcc $$NVCC_OPTIONS $$CUDA_INC $$NVCC_LIBS --machine $$SYSTEM_TYPE -arch=$$CUDA_ARCH -c -o ${QMAKE_FILE_OUT} ${QMAKE_FILE_NAME}
    cuda.dependency_type = TYPE_C
    QMAKE_EXTRA_COMPILERS += cuda
}




结果图,能编译并运行


后续可以试试把一个大工程塞进来
————————————————

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

标签:QT,creator,int,void,ary1,ary2,CUDA,Ubuntu,cuda
From: https://www.cnblogs.com/eastgeneral/p/18224519

相关文章

  • QT实现对文件名进行排序
    QStringListQDir::entryList(QDir::Filtersfilters=NoFilter,QDir::SortFlagssort=NoSort)const,该成员函数实现根据路径获取该文件夹下文件,其中QDir::SortFlags是一个枚举类型,各个常量参照QT的官方文档:QDirfiledir(dir_path);QStringListfilenames=filedir.entryL......
  • 如何在Ubuntu22.04上安装SDK Manager
    1.Jetson官网注册账号,登陆账号后去下载中心下载deb文件;Jetson官网注册账号参考我的博文:NVIDIAJetson平台账号注册说明-CSDN博客2.下载完毕后将deb文件包拖入Ubuntu22.04虚拟机内,执行以下命令安装;sudodpkg-isdkmanager_2.1.0-11669_amd64.deb3.终端输入“sdkmanagr......
  • 深入探索Qt框架系列之信号槽原理(三)
    前面两篇分别介绍了QObject::connect和QMetaObject::Connection,那么信号槽机制的基础已经介绍完了,本文将介绍信号槽机制是如何从信号到槽的,以及多线程下是如何工作的。信号槽机制源码解析1.信号的触发以该系列的第一篇文章中的示例举例:test_moc.h:classtest_moc:p......
  • Nginx 实战-01-nginx ubuntu(windows WSL2) 安装笔记
    前言大家好,我是老马。很高兴遇到你。我们为java开发者实现了java版本的nginxhttps://github.com/houbb/nginx4j如果你想知道servlet如何处理的,可以参考我的另一个项目:手写从零实现简易版tomcatminicat手写nginx系列如果你对nginx原理感兴趣,可以阅读:从零......
  • 2024年4月最新Ubuntu安装分享(详细超多图)
    2024Ubuntu安装经验分享      本次Ubuntu安装经验分享分为两个部分,第一部分是我自己总结摸索出来的安装步骤,第二部分是我在安装中出现的一些常见或不常见的问题,写出来供大家参考.一、安装步骤1.电脑中重要资料备份(选作)2.准备16G以上空白U盘,制作Windows启动盘​。(......
  • Qt使用qBreakpad定位崩溃位置(2)
    软件调试Qt使用qBreakpad定位崩溃位置(2)目录软件调试Qt使用qBreakpad定位崩溃位置(2)前言1、Google-Breakpad2、qBreakpad3、crashpad4、注意Linux下1、环境2、qBreakpad源码准备3、qBreakpad编译4、测试qBreakpad5、dump文件调试5.1编译breakpad5.2开始分析dmp文件Windows下1......
  • ubuntu20.04跑通slambook2 ch13编译
    这里记录如何跑通slambook2ch13的代码1.依赖说明在原书代码的3rdparty下大部分的依赖,只需要对每一个库源码安装即可,在CMakeists.txt目录下打开命令行输入:mkdirbuildcdbuildcmake..makesudomakeinstall但sophus和opencv比较麻烦,单独拿出来讲一下。2.sophus安装3r......
  • QT_5.2_matlab组合多维数组
    完整代码示例以下是一个完整的代码示例,展示如何将多个测试数据拼接成一个四维数组:%示例测试数据nn=10;%假设有10个测试样本TestData=cell(nn,6);%创建一个包含10个样本的单元格数组,每个样本包含6个二维矩阵%生成一些随机数据作为示例fork=1:nnforj=1......
  • Windows下Qt使用dump定位崩溃位置(1)
    软件调试Windows下Qt使用dump定位崩溃位置(1)目录软件调试Windows下Qt使用dump定位崩溃位置(1)1、Qt崩溃定位方法2、什么是dump文件3、使用vs调试dmp4、下载Windows符号表5、下载Qt符号表6、主要代码7、源代码更多精彩内容......
  • Qt-qrencode开发-生成、显示二维码
    Qt-qrencode开发-生成二维码......