cuda编程002—流
没有使用同步的情况:
#include <stdio.h>
#include <cuda_runtime.h>__global__ void test_kernel(){printf("Message from Device.\n");
}
void test(){test_kernel<<<1, 1>>>();
}
#include <cuda_runtime.h>
#include <stdio.h>void test();
int main(){test();printf("Message from Host.\n");getchar();return 0;
}
先调用的核函数,结果是先输出的Host:

进行同步,代码如下:
#include <cuda_runtime.h>
#include <stdio.h>void test();
int main(){test();// cudaDeviceSynchronize(); // 设备同步,整个GPU设备的同步等待任务完成cudaStreamSynchronize(nullptr); // 流同步printf("Message from Host.\n");getchar();return 0;
}
输出结果:

cuda流整体笔记和代码
#include <math.h>
#include <stdio.h>
#include <cuda_runtime.h>// 核函数
__global__ void test_kernel(float* array, int edge){int position = blockDim.x * blockIdx.x + threadIdx.x;if(position >= edge) return;array[position] *= 0.5f;
}void test(cudaStream_t stream, float* array, int num){int threads = 512;int blocks = ceil(num / (float)threads);test_kernel<<<blocks, threads, 0, stream>>>(array, num);
}
#include <cuda_runtime.h>
#include <stdio.h>// C++ 文件
void test(cudaStream_t stream, float* array, int num);int main(){cudaStream_t stream;cudaEvent_t start, stop;// cudaEvent 是事件, 通常可以用来观察队列的执行情况// 比如,统计执行时间等操作cudaEventCreate(&start);cudaEventCreate(&stop);// 是重操作,不要随便创建太多,会消耗资源的// GPU计算的基本原则,是尽可能的使得计算密集,如果使用同步的话就是算一坨,等一会儿,算一坨,等一会。费劲吧啦的// 通过stream使得计算连续化、密集化,这样最好// GPU有个使用率,跟CPU使用了一样的,以GPU使用率越高越好cudaStreamCreate(&stream);cudaEventRecord(start, stream);int num = 10000;float* a = new float[num];for(int i=0; i < num; ++i)a[i] = i;float* a_device = nullptr;size_t a_bytes = sizeof(float) * num;cudaMalloc(&a_device, a_bytes);// 异步依赖的指针数据,必须在执行完成前一直存在,否则会造成例外结果// 并且异步执行时,对指针数据的修改,也需要合理的理解cudaMemcpyAsync(a_device, a, a_bytes, cudaMemcpyHostToDevice, stream);// 如果异步复制加上下面这段代码。会导致GPU边复制,CPU边修改,结果是a_device的内容不可控// 因此不要这么做,或者合理的去做你想做的// for(int i=0; i < num; ++i)// a[i] = 500-i;test(stream, a_device, num);cudaMemcpyAsync(a, a_device, a_bytes, cudaMemcpyDeviceToHost, stream);cudaEventRecord(stop, stream);cudaEventSynchronize(stop);float ms = 0;cudaEventElapsedTime(&ms, start, stop);printf("核的执行时间是:%.8f ms\n", ms);// 打印前10个结果for(int i = 0; i < 10; ++i){printf(i == 0 ? "%.2f" : ", %.2f", a[i]);}printf("\n");// cudaStreamSynchronize(stream);// cudaDeviceSynchronize(); // 设备同步,整个GPU设备的同步等待任务完成// cudaStreamSynchronize(nullptr); // 流同步/* 流的概率,stream, 类型全称是cudaStream_t1. 认为流是一个线程,任务级别的线程2. 认为流是一个任务队列3. 把异步执行的任务管理起来,在需要的时候等待或者做更多处理4. 默认流,指nullptr,如果给定为nullptr,就会使用默认流cuda核的执行都是异步的, 通过流来实现需要的同步任务队列队列特性:先进先出,后进后出cudaMemcpy 属于同步版本的内存拷贝等价于干了 -> 发送指令(任务队列中增加一个任务),我要复制了, cudaMemcpyAsync-> 等待复制完成,cudaDeviceSynchronize*/printf("Message from Host.\n");// 符合栈的方式分配和释放,就不用担心有bugdelete [] a;cudaFree(a_device);cudaStreamDestroy(stream);cudaEventDestroy(start);cudaEventDestroy(stop);// getchar();return 0;
}
相关文章:
cuda编程002—流
没有使用同步的情况: #include <stdio.h> #include <cuda_runtime.h>__global__ void test_kernel(){printf("Message from Device.\n"); } void test(){test_kernel<<<1, 1>>>(); } #include <cuda_runtime.h> #i…...
2023年国赛 高教社杯数学建模思路 - 案例:粒子群算法
文章目录 1 什么是粒子群算法?2 举个例子3 还是一个例子算法流程算法实现建模资料 # 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 什么是粒子群算法? 粒子群算法(Pa…...
【C#学习笔记】数据类中常用委托及接口——以List<T>为例
文章目录 List\<T\>/LinkedList \<T\>为什么是神?(泛型为什么是神)一些常见,通用的委托和接口ComparisonEnumerator List<T>/LinkedList <T>为什么是神?(泛型为什么是神࿰…...
idea的断点调试
1、行断点 首先在代码的最左侧点击会显示红色的圆圈 第二步在main方法中右键选中debug run进行运行 会出现下面图片的情况 出现上图之后,点击console 下一步 这个时候就可以看到调试的结果了 6、方法调用栈:这里显示了该线程调试所经过的所有方法&…...
vue和react学哪一个比较有助于以后发展?
前言 首先声明vue和react这两个框架都是很优秀的前端框架,使用的人群下载量上数量也是相当的庞大,这篇文章没有贬低或者攻击任何一个框架的意思,只在于根据答主的问题来对这两个框架做出对比,以方便大家更加清晰的了解到当下vue和…...
【SkyWalking】分布式服务追踪与调用链系统
1、基本介绍 SkyWalking是一个开源的观测平台,官网:Apache SkyWalking; 可监控:分布式追踪调用链 、jvm内存变化、监控报警、查看服务器基本配置信息。 2、SkyWalking架构原理 在整个skywalking的系统中,有三个角色&am…...
Python“牵手”速卖通商品详情API接口运用场景及功能介绍
速卖通电商API接口是针对速卖通提供的电商服务平台,为开发人员提供了简单、可靠的技术来与速卖通电商平台进行数据交互,实现一系列开发、管理和营销等操作。其中包括商品详情API接口,通过这个API接口商家可以获取商品的详细信息,包…...
java调用python脚本的示例
java调用python脚本的示例 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader;public class JavaCallPythonScript {public static void main(String[] args) {// 调用Python脚本的命令String pythonScriptPath "path/to/y…...
【C语言】柔性数组(可边长数组)
一、介绍 柔性数组(Flexible Array),又称可变长数组。一般数组的长度是在编译时确定,而柔性数组对象的长度在运行时确定。在定义结构体时允许创建一个空数组(例如:arr [ 0 ] ),该数…...
C++信息学奥赛1131:基因相关性
这段代码的功能是比较两个字符串的相似度,并根据给定的阈值判断是否相似。 解析注释后的代码如下: #include <iostream> #include <string> using namespace std;int main() {double bf; // 定义双精度浮点数变量bf,用于存储阈…...
如何保证分布式系统中服务的高可用性:应对 ZooKeeper Leader 节点故障的注册处理策略
推荐阅读 AI文本 OCR识别最佳实践 AI Gamma一键生成PPT工具直达链接 玩转cloud Studio 在线编码神器 玩转 GPU AI绘画、AI讲话、翻译,GPU点亮AI想象空间 资源分享 「java、python面试题」来自UC网盘app分享,打开手机app,额外获得1T空间 https://dr…...
SQL注入之延时注入
文章目录 延时注入是什么?延时注入获取数据库版本号 延时注入是什么? 延时注入就是利用sleep()函数通过if语句判断所写的语句真假,如果为真返回我们想要的东西(例如:数据库的长度,数据库的名字等࿰…...
运维高级学习--Docker(二)
1、使用mysql:5.6和 owncloud 镜像,构建一个个人网盘。 #拉取mysql5.6和owncloud镜像 [rootlocalhost ~]# docker pull mysql:5.6 [rootlocalhost ~]# docker pull owncloud [rootlocalhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED …...
QT的核心——信号与槽
目录 回顾C 语言信号 1、信号与槽 2、关联信号与槽 2.1自动关联信号与槽 2.2手动关联信号与槽 2.3断开信号与槽 3、自定义信号 3.1自定义信号使用条件 3.2自定义槽函数使用条件 4、信号与槽参数传递 4.1自定义一个带参的信号 4.2关联带参的信号与槽 4.3发送一个带…...
【业务功能篇73】web系统架构演变-单体-集群-垂直化-服务化-微服务化
1.服务架构的演 1.1 单体架构 单体架构应该是我们最先接触到的架构实现了,在单体架构中使用经典的三层模型,即表现层,业务逻辑层和数据访问层。 单体架构只适合在应用初期,且访问量比较下的情况下使用,优点是性价比很…...
MyCAT命令行监控
9066端口 ,用mysql命令行连接 Mysql –utest –ptest –P9066 show help 可显示所有相关管理命令 显示后端物理库连接信息,包括当前连接数,端口 Show backend Show connection 显示当前前端客户端连接情况,已经网络流量信息、…...
【python】正则表达式匹配数据
前言 使用正则表达式处理数据,可进行字符串匹配、提取和替换等操作。在python中,通过re库完成正则匹配的操作。 一、正则语法规则 1.常用匹配符 模式描述^匹配字符串开头$匹配字符串结尾.匹配任意字符*匹配前面的字符零次或多次匹配前面的字符一次或多…...
【C++】用Windows API在控制台实现选择选项
2023年8月23日,周三上午 今天上午花了一个小时来实现这个 这个程序在碰到边界时会发出声音, 通过调用Windows API的Beep函数来实现。 #include<Windows.h> #include<conio.h> #include<iostream> #include<cstdlib>const int …...
Golang 批量执行/并发执行
提到Golang,都说Golang 天生高并发。所以分享一下我认为的Golang高并发精髓 简单的并发执行util package util import ("context""sync" )type batchRunner struct {BatchSize intctx context.Contextchannel chan func()wg sy…...
使用go语言、Python脚本搭建一个简单的chatgpt服务网站。
使用go语言、Python脚本搭建一个简单的GPT服务网站 前言 研0在暑假想提升一下自己,自学了go语言编程和机器学习相关学习,但是一味学习理论,终究是枯燥的,于是自己弄点小项目做。 在这之前,建议您需要掌握以下两个技…...
海康WEBSDK无插件版实战:零基础构建WEB端网络摄像机实时监控系统
1. 环境准备:5分钟搞定基础配置 第一次接触海康WEBSDK无插件版时,我也被那些专业术语吓到过。但实际操作后发现,只要准备好三样东西就能开工:一台能联网的电脑、海康网络摄像机、以及从官网下载的开发包。这里分享几个新手容易踩的…...
Untrunc:10倍速视频修复工具,让损坏的MP4/MOV文件起死回生
Untrunc:10倍速视频修复工具,让损坏的MP4/MOV文件起死回生 【免费下载链接】untrunc Restore a truncated mp4/mov. Improved version of ponchio/untrunc 项目地址: https://gitcode.com/gh_mirrors/un/untrunc 你是否曾经因为视频文件损坏而失去…...
雷电模拟器装Magisk后,自带的文件管理器为啥打不开/data?用MT管理器一招搞定
雷电模拟器Magisk环境下文件管理器的权限困局与实战解决方案 当你在雷电模拟器中成功安装Magisk后,可能会遇到一个令人困惑的现象:原本可以自由访问系统目录的自带文件管理器,突然对/data和/system等关键路径"视而不见"。这并非模拟…...
Win11 任务栏Copilot图标消失?三步教你快速恢复
1. 为什么Win11任务栏的Copilot图标会消失? 最近有不少Win11用户反馈,原本好好显示在任务栏右侧的Copilot图标突然不见了。这个问题其实很常见,我自己的电脑也遇到过几次。经过多次测试和排查,我发现主要有以下几个原因会导致Copi…...
如何快速打造微信风格视频编辑功能?推荐开源神器WeiXinRecordedDemo
如何快速打造微信风格视频编辑功能?推荐开源神器WeiXinRecordedDemo 【免费下载链接】WeiXinRecordedDemo 仿微信视频拍摄UI, 基于ffmpeg的视频录制编辑 项目地址: https://gitcode.com/gh_mirrors/we/WeiXinRecordedDemo WeiXinRecordedDemo是一款基于FFmpe…...
brpc并发编程模型性能对比:基准测试结果
brpc并发编程模型性能对比:基准测试结果 【免费下载链接】brpc brpc is an Industrial-grade RPC framework using C Language, which is often used in high performance system such as Search, Storage, Machine learning, Advertisement, Recommendation etc. &…...
Qwen2.5-VL-7B-Instruct应用场景:跨境电商商品图自动打标+多语种描述生成
Qwen2.5-VL-7B-Instruct应用场景:跨境电商商品图自动打标多语种描述生成 1. 跨境电商的痛点与解决方案 跨境电商卖家每天面临两个核心挑战:商品图片标注和多语言描述撰写。传统方式需要人工逐张图片添加标签,再用翻译工具转换语言ÿ…...
AI原生应用的微服务架构设计模式
AI原生应用的微服务架构设计模式:用智能餐厅的故事讲透AI与微服务的碰撞关键词:AI原生应用、微服务架构、设计模式、模型生命周期、实时数据流摘要:当AI大模型、边缘计算和实时决策需求爆发时,传统单体架构已无法满足AI应用的动态…...
Vue 3 Fragments:打破枷锁的组件化革命
Vue 3 Fragments:打破枷锁的组件化革命 在前端框架的演进史上,每一次对底层限制的突破,往往都伴随着开发体验的质的飞跃。Vue 3 中引入的 Fragments(片段) 特性,正是这样一场迟来的“解绑”革命。它彻底粉碎…...
OpenClaw语音交互方案:Qwen3-32B镜像对接Whisper实时转写
OpenClaw语音交互方案:Qwen3-32B镜像对接Whisper实时转写 1. 为什么需要语音交互方案 作为一个长期与命令行打交道的开发者,我始终在寻找更自然的交互方式。键盘输入固然高效,但在某些场景下——比如双手被占用时调试代码、厨房里边做饭边查…...
