cuda笔记-流的使用(定义、创建、消耗、同步)
定义流:
cudaStream_t stream;
创建流:
cudaStreamCreate(cudaStream_t *s)
销毁流:
cudaStreamDestroy(cudaStream_t s)
流的同步:显示同步
//同步单个流,等待该命令都完成
cudaStreamSynchronize(cudaStream_t stream);//同步所有流,等待整个设备上的流都完成
cudaDeviceSynchronize();//通过某个事件:等待某个事件结束后执行该流上的命令
cudaStreamWaitEvent(cudaEvent_t stream);//查询一个流任务是否完成
cudaStreamQuery(cudaStream_t stream);
流的使用
在使用GPU完成任务时,有2个地方可以使用到流
以_global_定义的kernel函数可以交给流去执行
kernel<<<gridDim, blockDim, shared_memory_size, stream>>>(parameters);
GPU和CPU之间数据传输
cudaMemcpyAsync(dst, src, copy_size, copy_direction, stream);
程序运行截图如下:
代码如下:
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include <stdio.h>
#include <iostream>using namespace std;__global__ void addKernel(int *c, int *a, int *b)
{int i = threadIdx.x;c[i] = a[i] + b[i];
}void testStream() {int p_data_a[100] = { 0 };int p_data_b[100] = { 0 };int p_data_c[100] = { 0 };for (int i = 0; i < 100; i++) {p_data_a[i] = i;p_data_b[i] = 10 + i;p_data_c[i] = 0;}cout << "begin" << endl;for (int i = 0; i < 100; i++) {cout << p_data_c[i] << " ";}cout << endl;int *dev_a = nullptr;int *dev_b = nullptr;int *dev_c = nullptr;cudaMalloc(&dev_a, sizeof(int) * 100);cudaMalloc(&dev_b, sizeof(int) * 100);cudaMalloc(&dev_c, sizeof(int) * 100);//拷贝到内存cudaMemcpy(dev_a, p_data_a, sizeof(int) * 100, cudaMemcpyHostToDevice);cudaMemcpy(dev_b, p_data_b, sizeof(int) * 100, cudaMemcpyHostToDevice);cudaStream_t streams[100];for (int i = 0; i < 100; ++i)cudaStreamCreate(streams + i);for (int i = 0; i < 100; ++i)addKernel << <1, 1, 0 >> > (dev_c + i, dev_a + i, dev_b + i);cudaDeviceSynchronize();cudaMemcpy(p_data_c, dev_c, sizeof(int) * 100, cudaMemcpyDeviceToHost);cout << "end:" << endl;for (int i = 0; i < 100; i++) {cout << p_data_c[i] << " ";}cout << endl;cout << "over" << endl;cudaFree(dev_a);cudaFree(dev_b);cudaFree(dev_c);
}int main() {testStream();getchar();return 0;
}
cuda笔记-流的使用(定义、创建、消耗、同步)相关推荐
- oracle 隐藏视图定义,【学习笔记】show hidden parameter 创建查看隐藏参数视图
天萃荷净 分享一篇开发DBA常用的show hidden parameter,创建查看隐藏参数视图的案例步骤 1.创建查看隐藏参数视图(show_hidden_v$parameter) --conn ...
- Cuda Stream流 分析
Cuda Stream流分析 Stream 一般来说,cuda c并行性表现在下面两个层面上: • Kernel level • Grid level Stream和event简介 Cuda stre ...
- CUDA 7流简化并发
CUDA 7流简化并发 异构计算是指有效使用系统中的所有处理器,包括CPU和GPU.为此,应用程序必须在多个处理器上同时执行功能.CUDA应用程序通过在流(按顺序执行的命令序列)中,执行异步命令来管理 ...
- CUDA 7 流并发性优化
CUDA 7 流并发性优化 异构计算是指高效地使用系统中的所有处理器,包括 CPU 和 GPU .为此,应用程序必须在多个处理器上并发执行函数. CUDA 应用程序通过在 streams 中执行异步命 ...
- CUDA Stream流并发性
目录 1.CUDA 中的异步命令 2.默认流 3.Multistream多流示例 异构计算是指高效地使用系统中的所有处理器,包括 CPU 和 GPU .为此,应用程序必须在多个处理器上并发执行函数. ...
- python houdini_【微笔记】houdini使用python创建城市教程笔记II
原标题:[微笔记]houdini使用python创建城市教程笔记II 今天继续学习第二部分,使用python处理block和创建属性,批量处理导入的建筑模型.最大的感受是使用程序去处理批量重复的东西真 ...
- python houdini_【微笔记】houdini使用python创建城市教程笔记I
原标题:[微笔记]houdini使用python创建城市教程笔记I 昨天小编分享了houdini使用python制作城市的教程,讲解得非常不错,不过个人建议大家至少有一些python基础和houdin ...
- SSM米米商城项目笔记一(数据库表创建和项目搭建)
米米商城项目笔记一(数据库表创建和项目搭建) 使用的相关技术[当前最新技术]: IDEA:2022+ JDK:1.8 MySQL:8.0+ Maven:3.8+ Tomact:9.0+ 创建数据库信息 ...
- RN学习笔记02:利用WebStorm创建RN项目
RN学习笔记02:利用WebStorm创建RN项目 在RN学习笔记01里,安装了node.js与react-native-cli,而且配置了环境变量. 在命令行环境,利用react-native in ...
最新文章
- 关于页面元素在父容器里水平居中、垂直居中的问题
- 鸿蒙兼容安卓app 为什么还要生态,就因为鸿蒙兼容安卓APP,中兴就宣布弃用?...
- 为什么边缘概率密度是联合概率密度的积分_德甲前瞻|柏林赫塔VS柏林联合
- use vue 多个_vue.use 插件系统详解
- 如何给按钮加上链接功能
- hdu 6386 Age of Moyu (重边判断)
- gpedit msc组策略面板 win10在哪里_Win10家庭版找不到本地组策略gpedit.msc解决办法...
- 如何从0到1搭建物联网系统?
- Fedora14下 wordPress 配置
- webStrom 开始你的第一个React应用
- 知了课堂小程序es6
- 2022PMP考试敏捷知识点(3)
- [产品]博客文章被企业群组收录的方法
- 管理用计算机修理费属于什么会计科目,维修费是什么会计科目
- 华容道源代码android,基于Android的华容道游戏的源代码
- OpenCV之findContours获取轮廓(Python版)
- 牛客练习赛52 B:Galahad(树状数组维护区间不同元素和(个数))
- 从车辆工程转行程序员两年,我是这么走过来的
- 【漫漫转码路】Python Day 15
- 什么是局域网唤醒? 如何启用局域网唤醒?