【QT开发(9)】QT 中使用CUDA 代码

news2025/1/16 1:09:30

在之前的文章【CUDA编程(1)】 初识CUDA编程 写了CUDA相关的知识。最近也在研究 并行异构的课程,在QT里面加入相关的cuda 代码试一下!

首先需要 在camke 中开启cuda,参考之前的文章【cmake开发(12)】Cmake同时编译cpp文件和cu文件

文章目录

  • 仓库地址
  • 1 cu文件单独配置cmakelists
  • 2 修改主 cmakelist 文件,引入这个gpu_lib 库
  • 3 cpp 中 修改 main.cpp 调用这个 gpu_lib 库
  • 演示
  • 参考

仓库地址

基于【QT开发(8)】QT 中使用tensorrt的项目文件进行修改。

地址https://gitee.com/hiyanyx/qt5.14-cpp_dds_-project/tree/add_cuda_helloworld
分支:add_cuda_helloworld

修改文件情况
在这里插入图片描述

1 cu文件单独配置cmakelists

项目目录下既有.cu文件又有.cpp文件,先将.cu编译为动态库,再由.cpp调用

CMakeLists.txt:

cmake_minimum_required(VERSION 3.17)
project(gpu_lib)
enable_language(CUDA)

aux_source_directory(. SRC_CUDA)
add_library(gpu_lib SHARED ${SRC_CUDA})
/* deploy.h */
#ifndef gpu_api
#define gpu_api 

extern "C"
int deploy();

#endif
/** deploy.cu **/
#include <stdio.h>
#include "deploy.h"

__global__ void square(float* d_out, float* d_in){
    int idx = threadIdx.x;
    float f = d_in[idx];
    d_out[idx] = f * f;
printf("Hello from GPU\n");
}

int deploy(){
    const int ARRAY_SIZE = 8;
    const int ARRAY_BYTES = ARRAY_SIZE * sizeof(float);

    float h_in[ARRAY_SIZE];
    float h_out[ARRAY_SIZE];
    for(int i = 0; i < ARRAY_SIZE; i++){
        h_in[i] = float(i);
    }

    float* d_in;
    float* d_out;

    cudaMalloc((void**) &d_in, ARRAY_BYTES);
    cudaMalloc((void**) &d_out, ARRAY_BYTES);

    cudaMemcpy(d_in, h_in, ARRAY_BYTES, cudaMemcpyHostToDevice);
    square<<<1, ARRAY_SIZE>>>(d_out, d_in);
    cudaMemcpy(h_out, d_out, ARRAY_BYTES, cudaMemcpyDeviceToHost);

    for(int i = 0; i < ARRAY_SIZE; i++){
        printf("%f", h_out[i]);
        if( i % 4 != 3 )
            printf("\t");
        else
            printf("\n");
    }

    cudaFree(d_in);
    cudaFree(d_out);

    return 0;
}

2 修改主 cmakelist 文件,引入这个gpu_lib 库

一般来说,主cmakelists 是不用开启 CUDA 支持的,我理解,可以在主 cmakelists 开启CUDA 支持,这样可以 配置 CUDA的架,nvcc 编译器地址等。

1、加入头文件

 # ===== 设置 include 目录路径 =====
target_include_directories ( emptyApp PUBLIC
    ${CMAKE_CURRENT_SOURCE_DIR}/deps/gpu_lib
    )

2、加入 子目录,编译 gpu_lib

add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/deps/gpu_lib EXCLUDE_FROM_ALL)

3、添加动态库

    target_link_libraries( emptyApp 
                            gpu_lib )

3 cpp 中 修改 main.cpp 调用这个 gpu_lib 库

#include "pch.h"
#include "mainwindow.h"
#include "c.h"

#include <rclcpp/rclcpp.hpp>
#include "example.h"

#include <QApplication>
//-------------------- Main --------------------//
#include "A.h"
#include "SysConfig.h" // 此文件由 cmake 自己生成,并不在 src/ 目录中

#include "deploy.h"

int main( int argc, char* argv[] ){
		deploy();
        return 0;

}

演示

请添加图片描述

参考

https://blog.csdn.net/qq_43596950/article/details/130654274

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1104712.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

echarts-liquidfill水球图教程

接到了一个水球图的需求&#xff0c;如上图所示&#xff0c;点击不同的水球&#xff0c;下面的进度条呈现不同维度的百分比情况 。 第一步&#xff0c;安装插件 npm install echarts npm install echarts-liquidfill注意在这里需要查看echarts版本是4还是5&#xff0c;echart…

基于深度学习的地铁客流预测架构

导读 论文题目为&#xff1a;《DeepPF: A deep learning based architecture for metro passenger flow prediction》。是一篇2019年发表于《Transportation Research Part C》的文章&#xff0c;介绍了一种新型的基于深度学习的地铁客流预测架构&#xff0c;通过采取模块化的方…

代码随想录算法训练营第23期day25| 216.组合总和III 、17.电话号码的字母组合

目录 一、&#xff08;leetcode 216&#xff09;组合总和III 剪枝 二、&#xff08;leetcode 17&#xff09;电话号码的字母组合 思路 一、&#xff08;leetcode 216&#xff09;组合总和III 力扣题目链接 状态&#xff1a;已AC&#xff0c;就是在77题的前提下&#xff0c…

【23真题】130分送分!剩下20谁也别拿满!

今天分享的是23年武汉工程大学834的信号与系统试题及解析。 填空涉及到概念题&#xff0c;和简答题&#xff01;这种题型非常少见&#xff01;很像我们的梦马全程班6月模考&#xff0c;也考了简答概念&#xff0c;但是我们只是为了帮助大家理解知识点&#xff0c;他玩真的&…

使用流量管理工具保护 Kubernetes 的六种方法

原文作者&#xff1a;Jenn Gile - F5 NGINX 产品营销经理 原文链接&#xff1a;使用流量管理工具保护 Kubernetes 的六种方法 转载来源&#xff1a;NGINX 中文官网 NGINX 唯一中文官方社区 &#xff0c;尽在 nginx.org.cn 编者按 —— 本文是以下系列博文中的一篇&#xff08;共…

云服务器快速搭建网站

目录 安装Apache Docker 安装 Mysql 安装 Docker 依赖包 添加 Docker 官方仓库 安装 Docker 引擎 启动 Docker 服务并设置开机自启 验证 Docker 是否成功安装 拉取 MySQL 镜像 查看本地镜像 运行容器 停止和启动容器 列出正在运行的容器 安装PHP环境 搭建网站 安装…

前端刷新token,判断token是否过期(jwt鉴权)

4.1 什么是 JWT JWT 是 Auth0 提出的通过 对 JSON 进行加密签名来实现授权验证的方案&#xff1b; 就是登录成功后将相关用户信息组成 JSON 对象&#xff0c;然后对这个对象进行某种方式的加密&#xff0c;返回给客户端&#xff1b; 客户端在下次请求时带上这个 Token&#xff…

Python网络编程改良版服务端

在《Python中套接字实现服务端和客户端3-1》中提到服务端可以接收来自客户端的连接&#xff0c;并且创造新的套接字与客户端进行数据通信。此时的服务端只能与一个客户端进行数据通信&#xff0c;如果有多个客户端连接服务端&#xff0c;该怎么对服务端进行改良呢&#xff1f; …

全流程TOUGH系列软件应用丨入门丨基础丨进阶丨实操

TOUGH系列软件是由美国劳伦斯伯克利实验室开发的&#xff0c;旨在解决非饱和带中地下水、热运移的通用模拟软件。和传统地下水模拟软件Feflow和Modflow不同&#xff0c;TOUGH系列软件采用模块化设计和有限积分差网格剖分方法&#xff0c;通过配合不同状态方程&#xff08;EOS模…

100.一个linux内核选项对ssh的影响

&#xff08;从这开始给文章编号&#xff0c;编号从100开始&#xff09; 平台&#xff1a;rk3399&#xff08;f4932-r2h&#xff09; 内核&#xff1a;linux5.10 文件系统&#xff1a;firefly ssh&#xff1a;有线网卡 串口终端打印正常&#xff0c; 但是ssh登录却出现如下…

Xshell7试用期过了,打开就显示评估期已过,想继续或者不能删除怎么办?详细说明解决步骤

文章目录 1、问题说明2、解决办法2.1 重新安装2.2 卸载 1、问题说明 多长时间没用 Xshell 远程连接服务器&#xff0c;发现之前没有使用魔法工具处理&#xff08;正版&#xff09;&#xff0c;现在过期了。 2、解决办法 想继续使用Xshell的话&#xff0c;有两种方式&#xff…

全光谱台灯对孩子眼睛好吗?2023五款全光谱护眼台灯推荐

全光谱台灯是一种能够模拟自然光谱的照明设备&#xff0c;其光线成分丰富&#xff0c;更接近自然阳光的光谱。相比传统的白炽灯或荧光灯&#xff0c;全光谱台灯在照明效果上更加均匀柔和&#xff0c;并且可以提供更好的颜色还原效果。对于孩子的眼睛来说&#xff0c;全光谱台灯…

ios UI 基础开发二

第一节&#xff1a;UIPickerView、UIPickerViewDataSource、UIPickerViewDelegate 设置约束&#xff0c;如果要设置两个兄弟的约束&#xff0c;可以按住option键&#xff0c;用鼠标右键把a拖到b上面&#xff0c;表示a按照b来对齐 生成随机数 如果后面列的数据&#xff0c;依赖前…

JL-03多场合通用型小型气象站

JL-03小型气象站&#xff0c;用于对风速、风向、雨量、空气温度、空气湿度、太阳辐射、光照强度、土壤温度、土壤湿度、蒸发量、大气压力等气象要素进行监测。既可以通过无线通讯将数据传送至云平台&#xff0c;又可以通过配套的数据采集通讯线与计算机进行连接&#xff0c;将数…

ARP协议

ARP协议 文章目录 ARP协议ARP协议的作用ARP协议的定位ARP数据报的格式ARP协议的工作流程ARP缓存表RARP协议 地址解析协议&#xff0c;即ARP&#xff08;Address Resolution Protocol&#xff09;&#xff0c;是根据IP地址获取物理地址的一个TCP/IP协议。 ARP协议的作用 ARP协议…

手机爬虫用Scrapy详细教程:构建高效的网络爬虫

如果你正在进行手机爬虫的工作&#xff0c;并且希望通过一个高效而灵活的框架来进行数据抓取&#xff0c;那么Scrapy将会是你的理想选择。Scrapy是一个强大的Python框架&#xff0c;专门用于构建网络爬虫。今天&#xff0c;我将与大家分享一份关于使用Scrapy进行手机爬虫的详细…

2023最令人心动的短视频配音软件

配音在影视、广告和动画等领域中起着非常重要的作用&#xff0c;可以为作品增添情感和戏剧性。然而&#xff0c;许多人不知道如何制作配音&#xff0c;如果你也是这样&#xff0c;一定要花一分钟看完这篇文章。 其实现在有一些AI智能配音软件就很好用&#xff0c;可以帮助我们…

Windows安装SNMP服务

windows10安装SNMP服务 打开计算机的设置–应用–应用和功能–可选功能–点击加号添加功能,添加以下两个功能: windows server安装SNMP服务 搜索打开服务器管理器,点击功能–添加功能,勾选SNMP服务,点击下一步,等待安装完成 按win+R快捷键,运行service.msc,在服务中将…

电脑D盘文件凭空消失了?切记3招,轻松恢复文件!

“由于我c盘内存不够了&#xff0c;我就将部分重要的文件保存到了d盘&#xff0c;今天打开d盘后才发现我这些文件凭空消失了。这究竟是什么呀&#xff1f;还有机会找回这些消失的d盘文件吗&#xff1f;” D盘作为电脑中一个重要的磁盘&#xff0c;很多电脑用户也会选择将文件保…

摩尔信使MThings的协议转换(数据网关)功能

摩尔信使MThings可以作为现场总线&#xff08;RS485&#xff09;和以太网的数据中枢&#xff0c;并拥有强大的Modbus协议转换功能。 数据网关功能提供协议转换和数据汇聚功能&#xff0c;可实现多维度映射&#xff0c;包括&#xff1a;不同的通道(总线)类型、协议类型&#xff…