首页 > 系统相关 >Ubuntu上使用QT creator运行cuda程序 转载的文章

Ubuntu上使用QT creator运行cuda程序 转载的文章

时间:2024-05-22 10:40:08浏览次数:28  
标签: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/18205714

相关文章

  • Ubuntu 服务器采用Systemed管理Tomcat服务自动启动
    1、新建Systemed配置文件参考以下配置文件样例sudovim/lib/systemd/system/tomcat.service2、重新加载Systemed配置信息sudosystemctldaemon-reload3、打开自动启动Tomcatsudosystemctlenabletomcat.service4、启动Tomcatsudosystemctlstarttomcat.service......
  • Qt QMovie无法显示gif动画的一种解决方法
    注:本来用这种方法显示gif动画是没有问题的。问题:如下方法,槽函数startGif()如下,点击按钮无法出现gif动画分析:gif动画资源确实是加载进来了,但是在执行movie.start()时,整个资源就已经消失了,所以无法显示动画。要使资源长期存在需要用到c中的修饰符: static。1voidshowGif::st......
  • Qt QMovie播放gif(播放、暂停和继续)
    有些时候我们需要展示一个gif图片,可是用了普通的方法发现不行。啊哦,这就是生活中的理解和程序猿的区别了,程序猿眼中的gif不是图片,而是一个movie。QT提供了QMovie来进行操作。演示示例是通过两个按钮来进行操控,一个负责暂停一个负责进行继续播放。首先要在头文件中声明这个类,一......
  • qt如何将下拉框的框设置为圆角矩形
    在Qt中,可以使用样式表(QSS)来设置下拉框的外观,包括圆角矩形的样式。以下是一个例子://在C++代码中设置样式表QComboBox{border-radius:8px;/*设置圆角半径*/background-color:#FFFFFF;/*设置背景颜色*/color:#333333;/*设置文字颜色*/p......
  • Qt 动画播放之QMovie类
    主要是用到QMovie类实现在事件触发时开启动画播放效果(需要注意的是,这个动画播放默认是循环播放的,如果不做特殊处理动画会一直播放)1QMovie*movie=newQMovie("aaa.gif");2ui->movieLabel->setMovie(movie);3movie->start();//启动gif图片4//movie->......
  • qt之点的绘制示例demo
    #include"mainwindow.h"#include"ui_mainwindow.h"#include<QPainter>#include<QColor>QColorm_color;intm_x=0;intm_y=0;intm_w=0;intm_h=0;MainWindow::MainWindow(QWidget*parent):QMainWindow(parent)......
  • Qt 程序启动画面QSplashScreen
    QSplashScreen是Qt框架提供的一个类,用于在应用程序启动时显示一个带有文本和图像的启动画面(SplashScreen)。使用QSplashScreen类,你可以在应用程序启动时显示一个自定义的启动画面,以提供更好的用户体验。这个类提供了一些方法和属性,可以让你设置启动画面的文本、图像和其......
  • qt中添加多个UI界面,并在其他文件中调用该UI界面
    一、概述qt创建一个新项目时,会创建一个属于mainwindow'的主ui界面,这时如果想要创建多个窗口,可以有三种方法。第一种:使用代码创建一个新窗口,优点是灵活,缺点是麻烦,其中控件和布局都需要代码来创建。第二种:在ui设计界面使用tabwidget控件来达到多个窗口的效果,不过这种方法只能......
  • qt拖动窗口
    voida::mousePressEvent(QMouseEvent*event){if(event->button()==Qt::LeftButton&&event->pos().y()<(this->height()-mainWidget->height())){m_dragging=true;m_dragStarPos=event->pos();}}voida::......
  • 通过Ubuntu虚拟机+Linux移植LVGL并通过linux Frame buffer显示
    文章参考:https://gitee.com/socbis/linux-lvgllvglonlinuxFramebuffer主机环境:Ubuntu18.04lvgl8.0.1获取源码并运行demo获取源码需要3样东西来构建demo:lvgl核心控件库:从此处获取源码lvgl,选择版本Releasev8.0.1.显示和触摸接口层:关联图形库与硬件,源......