当前位置: 首页 > news >正文

CUDA学习笔记6——事件计时

事件计时

CUDA事件是直接在GPU上实现的,因此它们不适用于对同时包含设备代码和主机代码的混合代码计时。

  • cudaEventCreate 创建一个事件
  • cudaEventRecord 记录一个事件
  • cudaEventElapsedTime 计算两个事件之间经历的时间,第一个参数为某个浮点变量的地址,在这个参数中将包含两次事件之间经历的时间,单位是毫秒
#include <stdio.h>
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include<math.h>
#include <malloc.h> 
#include <opencv2/opencv.hpp>
#include <stdlib.h>#define BLOCK_SIZE 1//图像卷积 GPU
__global__ void sobel_gpu(unsigned char* in, unsigned char* out, const int Height, const int Width)
{int x = blockDim.x * blockIdx.x + threadIdx.x;int y = blockDim.y + blockIdx.y + threadIdx.y;int index = y * Width + x;int Gx = 0;int Gy = 0;unsigned char x0, x1, x2, x3, x4, x5, x6, x7, x8;if (x>0 && x<(Width-1) && y>0 && y<(Height-1)){x0 = in[(y - 1)*Width + (x - 1)];x1 = in[(y - 1)*Width + (x)];x2 = in[(y - 1)*Width + (x + 1)];x3 = in[(y)*Width + (x - 1)];x5 = in[(y)*Width + (x + 1)];x6 = in[(y + 1)*Width + (x - 1)];x7 = in[(y + 1)*Width + (x)];x8 = in[(y + 1)*Width + (x + 1)];Gx = (x0 + 2 * x3 + x6) - (x2 + 2 * x5 + x8);Gy = (x0 + 2 * x1 + x2) - (x6 + 2 * x7 + x8);out[index] = (abs(Gx) + abs(Gy)) / 2;}
}int main()
{cv::Mat src;src = cv::imread("complete004.jpg");cv::Mat grayImg,gaussImg;cv::cvtColor(src, grayImg, cv::COLOR_BGR2GRAY);cv::GaussianBlur(grayImg, gaussImg, cv::Size(3,3), 0, 0, cv::BORDER_DEFAULT);int height = src.rows;int width = src.cols;//输出图像cv::Mat dst_gpu(height, width, CV_8UC1, cv::Scalar(0));//GPU存储空间int memsize = height * width * sizeof(unsigned char);//输入 输出unsigned char* in_gpu;unsigned char* out_gpu;cudaMalloc((void**)&in_gpu, memsize);cudaMalloc((void**)&out_gpu, memsize);cudaEvent_t start, stop_gpu;cudaEventCreate(&start);//创建事件cudaEventCreate(&stop_gpu);//创建事件cudaEventRecord(start);//记录事件dim3 threadsPreBlock(BLOCK_SIZE, BLOCK_SIZE);dim3 blocksPreGrid((width + threadsPreBlock.x - 1)/threadsPreBlock.x, (height + threadsPreBlock.y - 1)/threadsPreBlock.y);cudaMemcpy(in_gpu, gaussImg.data, memsize, cudaMemcpyHostToDevice);sobel_gpu <<<blocksPreGrid, threadsPreBlock>>> (in_gpu, out_gpu, height, width);cudaEventRecord(stop_gpu);//记录事件cudaError_t  error_code = cudaGetLastError();if (error_code != cudaSuccess){printf("Error: %s\n", cudaGetErrorString(error_code));printf("FILE: %s\n", __FILE__);printf("LINE: %d\n", __LINE__);printf("Error code: %d\n", error_code);}cudaMemcpy(dst_gpu.data, out_gpu, memsize, cudaMemcpyDeviceToHost);float time_gpu;cudaEventElapsedTime(&time_gpu, start, stop_gpu);//事件计时printf("GPU time: %.3f ms \n", time_gpu);cudaEventDestroy(start);//销毁事件cudaEventDestroy(stop_gpu);cv::imwrite("dst_gpu_save.png", dst_gpu);//cv::namedWindow("src", cv::WINDOW_NORMAL);cv::imshow("src", src);cv::imshow("dst_gpu", dst_gpu);cv::waitKey();cudaFree(in_gpu);cudaFree(out_gpu);return 0;
}

在这里插入图片描述
在这里插入图片描述

相关文章:

CUDA学习笔记6——事件计时

事件计时 CUDA事件是直接在GPU上实现的&#xff0c;因此它们不适用于对同时包含设备代码和主机代码的混合代码计时。 cudaEventCreate 创建一个事件cudaEventRecord 记录一个事件cudaEventElapsedTime 计算两个事件之间经历的时间&#xff0c;第一个参数为某个浮点变量的地址…...

使用vscode调试ffmpeg源码

ffmpeg的编译配置 # --enable-debug 设置为调试级别 # --disable-stripping 如果不加此选项&#xff0c;会strip去掉符号信息 ./configure --prefix{output_path} --enable-debug --disable-stripping make -j10VSCode的配置 将以下文件对比替换工程.vscode目录下的相同文件 …...

微信小程序--数字化会议OA系统之首页搭建

一、Flex弹性布局 布局的传统解决方案&#xff0c;基于盒状模型&#xff0c;依赖 display属性 position属性 float属性。它对于那些特殊布局非常不方便&#xff0c;比如&#xff0c;垂直居中就不容易实现。 2009年&#xff0c;W3C提出了一种新的方案—-Flex布局&#xff0c;可…...

代码随想录算法训练营第六十天 | 739. 每日温度、496.下一个更大元素 I

739. 每日温度 链接&#xff1a; 代码随想录 &#xff08;1&#xff09;代码 496.下一个更大元素 I 链接&#xff1a; 代码随想录 &#xff08;1&#xff09;代码...

WebView 以及如何测试

混合应用 顾名思义&#xff0c;它们是本机应用程序和 Web 应用程序的混合体。它们可以在应用程序商店中下载&#xff0c;并且需要像本机应用程序一样从设备进行访问身份验证&#xff0c;但它们也有一个嵌入在应用程序中的浏览器&#xff08;WebView&#xff09;用于呈现 HTML。…...

Jetpack:013-Jetpack底部导航栏

文章目录 1. 概念介绍2. 使用方法2.1 NavigationBar2.2 NavigationBarItem 3. 示例代码3.1 代码和注释3.2 代码难点3.3 运行效果 4. 内容总结 我们在上一章回中介绍了Jetpack中弹出菜单相关的内容&#xff0c;本章回中将介绍 底部导航栏。闲话休提&#xff0c;让我们一起Talk …...

MATLAB - excel 读取

matlab中excel 读取 1. 写入excel文件 - xlswrite2. 读取excel文件 - xlsread 1. 写入excel文件 - xlswrite xlswrite(filename,A,sheet,xlRange) % 写入字符串 % 注意事项&#xff1a;Str需要是Cell格式&#xff0c;否则一个字母占一格 % Str {‘abc’}&#xff1b; xlswr…...

【AIGC核心技术剖析】Hotshot-XL 一种 AI 文本转 GIF 模型(论文 + 代码:经过训练可与Stable Diffusion XL一起使用)

Hotshot-XL 是一种 AI 文本转 GIF 模型,经过训练可与Stable Diffusion XL一起使用。 Hotshot-XL 可以使用任何经过微调的 SDXL 模型生成 GIF。这意味着两件事: 您将能够使用您可能想要使用的任何现有或新微调的 SDXL 模型制作 GIF。 如果您想制作个性化主题的 GIF,您可以…...

2023年9月青少年软件编程(C 语言) 等级考试试卷(八级)

2023年9月青少年软件编程&#xff08;C 语言&#xff09; 等级考试试卷&#xff08;八级&#xff09; 第 1 题 最短路径问题 平面上有n个点&#xff08;n<100&#xff09;&#xff0c;每个点的坐标均在-10000~10000之间。其中的一些点之间有连线。 若有连线&#xff0…...

MS17010(永恒之蓝)漏洞实战

曾因苦难多壮志&#xff0c;不教红尘惑坚心。 工具检测 实战过程 使用搜索命令&#xff0c;搜索ms17_010 search ms17_010 搜索网段中主机漏洞 use auxiliary/scanner/smb/smb_ms17_010 照例&#xff0c;show options 看一下配置 设置网段&#xff0c;run运行就行了 使用攻…...

ROS自学笔记十三:VScode的介绍和安装

Visual Studio Code&#xff08;简称VS Code&#xff09;是一款由Microsoft开发的免费、轻量级、开源的集成开发环境&#xff08;IDE&#xff09;。它支持多种编程语言&#xff0c;并且具有丰富的扩展系统&#xff0c;使得用户可以根据自己的需求自定义和扩展功能。 以下是VS …...

操作系统【OS】微内核

基本概念 微内核结构将操作系统划分为两大部分&#xff1a;微内核多个服务器微内核包含&#xff1a; 与硬件处理紧密相关的部分一些较基本的功能客户和服务器间的通信客户与服务器之间是借助微内核提供的消息传递机制来实现交互的 基本功能 进程管理 进程的通信、切换、调度…...

Ubuntu docker安装mysql

本文介绍如何在docker中安装mysql&#xff0c;之前有尝试过先在docker中安装一个ubuntu到镜像&#xff0c;然后进去再去安装mysql相关的东西&#xff0c;发现不行&#xff0c;这边整理一下一个可行的方式。 在下载镜像的时候&#xff0c;直接下载mysql镜像。 1.搜索镜像 doc…...

VSCode使用记录

一、安装 从官网 https://code.visualstudio.com 下载相应安装包 二、扩展&#xff1a;商店 Chinese (Simplified) (简体中文) Language Pack for Visual Studio CodeLive Serveropen in browserGitLens — Git superchargedRemote - SSHPrettier - Code formatterESLintpxt…...

正则表达式之学习笔记

正则表达式学习笔记 一、概念二、正则表达式组成三、常见的正则表达式3.1 .匹配任意字符3.2 * 匹配前一个字符的0个或多个实例3.3 ^ 匹配输入字符串的开头3.4 $ 匹配行尾3.5 [] 匹配字符集合\<\> 精确匹配符号 一、概念 正则表达式是由一系列特殊字符组成的字符串&#…...

Java String类

字符串转义符号为 \ 常见的转义字符 转移字符对应的英文是 escape character , 转义字符串&#xff08; Escape Sequence &#xff09; 字母前面加上捺斜线 "" 来表示常见的那些不能显示的 ASCII 字符 . 称为转义字符 . 如 \0,\t,\n 等&#xff0c;就称为转 义字…...

我的电子萝卜刀火了吗?

引言 大家好&#xff0c;我是亿元程序员&#xff0c;一位有着8年游戏行业经验的主程。 笔者在上一篇文章《萝卜刀真的太危险了,于是我用Cocos做了一个》中说到因女儿从学校回来之后想要我给她买一把萝卜刀被我拒绝&#xff0c;但是又想要让她体验一下&#xff0c;因此用Cocos…...

git 查看本地秘钥

第一步&#xff1a; 1&#xff0c;打开终端或者命令行窗口&#xff0c;输入一下命令&#xff1a; cd ~/.ssh进入ssh目录 2&#xff0c;查看该目录下的所有文件&#xff0c;输入以下命令: ls -al该命令将显示ssh目录下的所有文件&#xff0c;包括秘钥文件和配置文件,如果不存…...

【TensorFlow1.X】系列学习笔记【入门二】

【TensorFlow1.X】系列学习笔记【入门二】 大量经典论文的算法均采用 TF 1.x 实现, 为了阅读方便, 同时加深对实现细节的理解, 需要 TF 1.x 的知识 文章目录 【TensorFlow1.X】系列学习笔记【入门二】前言神经网络的参数神经网络的搭建前向传播反向传播 总结 前言 学习了张量、…...

详解一下HTML的语义化标签

目录 什么是语义化标签: HTML5的语义化元素的优点: HTML5的语义化元素的缺点: 来个例子: 语义化标签有那些: 什么是语义化标签: 语义化标签是HTML的一种特性&#xff0c;其核心目标是让标签具有特定的意义。它们的存在不仅帮助开发者更好地理解文档的结构&#xff0c;也让…...

如何快速掌握VideoSrt:Windows平台免费视频字幕生成工具终极指南

如何快速掌握VideoSrt&#xff1a;Windows平台免费视频字幕生成工具终极指南 【免费下载链接】video-srt-windows 这是一个可以识别视频语音自动生成字幕SRT文件的开源 Windows-GUI 软件工具。 项目地址: https://gitcode.com/gh_mirrors/vi/video-srt-windows VideoSrt…...

别再瞎调了!Fluent DPM模型这3个参数设置不对,仿真结果差十倍

Fluent DPM模型参数优化实战&#xff1a;避开颗粒追踪的三大陷阱 在计算流体动力学(CFD)仿真中&#xff0c;离散相模型(DPM)的准确设置往往是决定仿真成败的关键。许多工程师在使用Fluent进行喷雾、粉尘或颗粒两相流分析时&#xff0c;常常陷入"参数调参师"的困境——…...

用ILA抓波形:手把手教你调试XC7K325T的XDMA AXI总线读写时序

用ILA抓波形&#xff1a;深入解析XC7K325T的XDMA AXI总线调试实战 在FPGA开发中&#xff0c;AXI总线协议作为Xilinx系列芯片的核心互联标准&#xff0c;其稳定性和正确性直接决定了系统性能。而XDMA&#xff08;Xilinx DMA&#xff09;IP作为PCIe与AXI总线之间的桥梁&#xff0…...

PCIe事务排序避坑指南:为什么你的DMA传输会死锁?RO和IDO位到底该怎么设

PCIe事务排序避坑指南&#xff1a;为什么你的DMA传输会死锁&#xff1f;RO和IDO位到底该怎么设 在嵌入式系统和FPGA设计中&#xff0c;PCIe总线的DMA传输性能往往直接影响整个系统的吞吐量。但许多工程师在调试自定义PCIe设备时&#xff0c;都遇到过这样的困境&#xff1a;明明…...

OpenWrt V23.05安全加固:修改默认UI登录用户的完整流程

OpenWrt V23.05安全加固&#xff1a;修改默认UI登录用户的完整流程 在网络安全日益重要的今天&#xff0c;路由器作为家庭和企业网络的第一道防线&#xff0c;其安全性不容忽视。OpenWrt作为一款开源的嵌入式操作系统&#xff0c;因其高度可定制性和强大的功能而广受欢迎。然而…...

3大核心技巧解锁Office生产力:用Custom UI Editor重塑你的工作界面

3大核心技巧解锁Office生产力&#xff1a;用Custom UI Editor重塑你的工作界面 【免费下载链接】office-custom-ui-editor Standalone tool to edit custom UI part of Office open document file format 项目地址: https://gitcode.com/gh_mirrors/of/office-custom-ui-edit…...

国产车灯改装品牌排行榜,我用了半年很满意

很多车主问我&#xff1a;“国产车灯改装品牌到底怎么选&#xff1f;”、“车灯不够亮怎么升级才不踩坑&#xff1f;”、“激光大灯什么牌子好&#xff0c;LED大灯和激光大灯怎么选&#xff1f;”——这些问题背后&#xff0c;折射出一个现实&#xff1a;市面上品牌太多&#x…...

别只盯Attention了,FFN其实是大模型真正的“知识库”!

不知道大家发现没&#xff0c;最近大部分出圈的文章都在围绕Attention下功夫&#xff0c;包括位置编码&#xff0c;KV cache等等。相比之下&#xff0c;大模型里面的前馈神经网络&#xff08;FFN&#xff09;的待遇就惨多了&#xff0c;大家通常只会说一句&#xff1a;“注意力…...

达梦DM8数据库运维:如何用一条SQL批量清理SELECT长查询会话(附完整脚本)

达梦DM8数据库高效运维&#xff1a;批量清理SELECT长查询会话的实战指南 引言 数据库性能问题往往来得突然且猛烈。当系统监控面板上的CPU使用率曲线突然飙升&#xff0c;业务部门开始抱怨系统响应缓慢时&#xff0c;作为DBA的你必须在最短时间内定位问题并实施解决方案。在众多…...

FreeMove:如何在不破坏程序安装的情况下安全迁移Windows目录

FreeMove&#xff1a;如何在不破坏程序安装的情况下安全迁移Windows目录 【免费下载链接】FreeMove Move directories without breaking shortcuts or installations 项目地址: https://gitcode.com/gh_mirrors/fr/FreeMove FreeMove是一款开源的Windows目录迁移工具&am…...