定义流:

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笔记-流的使用(定义、创建、消耗、同步)相关推荐

  1. oracle 隐藏视图定义,【学习笔记】show hidden parameter 创建查看隐藏参数视图

    天萃荷净 分享一篇开发DBA常用的show hidden parameter,创建查看隐藏参数视图的案例步骤 1.创建查看隐藏参数视图(show_hidden_v$parameter) --conn ...

  2. Cuda Stream流 分析

    Cuda Stream流分析 Stream 一般来说,cuda c并行性表现在下面两个层面上: • Kernel level • Grid level Stream和event简介 Cuda stre ...

  3. CUDA 7流简化并发

    CUDA 7流简化并发 异构计算是指有效使用系统中的所有处理器,包括CPU和GPU.为此,应用程序必须在多个处理器上同时执行功能.CUDA应用程序通过在流(按顺序执行的命令序列)中,执行异步命令来管理 ...

  4. CUDA 7 流并发性优化

    CUDA 7 流并发性优化 异构计算是指高效地使用系统中的所有处理器,包括 CPU 和 GPU .为此,应用程序必须在多个处理器上并发执行函数. CUDA 应用程序通过在 streams 中执行异步命 ...

  5. CUDA Stream流并发性

    目录 1.CUDA 中的异步命令 2.默认流 3.Multistream多流示例 异构计算是指高效地使用系统中的所有处理器,包括 CPU 和 GPU .为此,应用程序必须在多个处理器上并发执行函数. ...

  6. python houdini_【微笔记】houdini使用python创建城市教程笔记II

    原标题:[微笔记]houdini使用python创建城市教程笔记II 今天继续学习第二部分,使用python处理block和创建属性,批量处理导入的建筑模型.最大的感受是使用程序去处理批量重复的东西真 ...

  7. python houdini_【微笔记】houdini使用python创建城市教程笔记I

    原标题:[微笔记]houdini使用python创建城市教程笔记I 昨天小编分享了houdini使用python制作城市的教程,讲解得非常不错,不过个人建议大家至少有一些python基础和houdin ...

  8. SSM米米商城项目笔记一(数据库表创建和项目搭建)

    米米商城项目笔记一(数据库表创建和项目搭建) 使用的相关技术[当前最新技术]: IDEA:2022+ JDK:1.8 MySQL:8.0+ Maven:3.8+ Tomact:9.0+ 创建数据库信息 ...

  9. RN学习笔记02:利用WebStorm创建RN项目

    RN学习笔记02:利用WebStorm创建RN项目 在RN学习笔记01里,安装了node.js与react-native-cli,而且配置了环境变量. 在命令行环境,利用react-native in ...

最新文章

  1. 关于页面元素在父容器里水平居中、垂直居中的问题
  2. 鸿蒙兼容安卓app 为什么还要生态,就因为鸿蒙兼容安卓APP,中兴就宣布弃用?...
  3. 为什么边缘概率密度是联合概率密度的积分_德甲前瞻|柏林赫塔VS柏林联合
  4. use vue 多个_vue.use 插件系统详解
  5. 如何给按钮加上链接功能
  6. hdu 6386 Age of Moyu (重边判断)
  7. gpedit msc组策略面板 win10在哪里_Win10家庭版找不到本地组策略gpedit.msc解决办法...
  8. 如何从0到1搭建物联网系统?
  9. Fedora14下 wordPress 配置
  10. webStrom 开始你的第一个React应用
  11. 知了课堂小程序es6
  12. 2022PMP考试敏捷知识点(3)
  13. [产品]博客文章被企业群组收录的方法
  14. 管理用计算机修理费属于什么会计科目,维修费是什么会计科目
  15. 华容道源代码android,基于Android的华容道游戏的源代码
  16. OpenCV之findContours获取轮廓(Python版)
  17. 牛客练习赛52 B:Galahad(树状数组维护区间不同元素和(个数))
  18. 从车辆工程转行程序员两年,我是这么走过来的
  19. 【漫漫转码路】Python Day 15
  20. 什么是局域网唤醒? 如何启用局域网唤醒?

热门文章

  1. ecshop常用二次开发修改
  2. Android 百度推送使用总结
  3. 今天学到的几个函数【二】
  4. sp_xml_preparedocument 处理xml文档
  5. 程序员的第一份实习!附面试初体验
  6. C/C++编程笔记:浅析 C 语言中宏定义的使用,知识点全解
  7. 基于hadoop架构的企业数字化转型,阿里数据中台实战案例
  8. 飞鸽传书是企业网络营销管理专家
  9. 一次使用duplicate创建测试数据库的过程
  10. 用VC写Assembly代码(5) --字符串