cuda笔记-流的使用(定义、创建、消耗、同步)
发布日期:2021-06-30 10:46:17
浏览次数:2
分类:技术文章
本文共 1861 字,大约阅读时间需要 6 分钟。
定义流:
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<<>>(parameters);
GPU和CPU之间数据传输
cudaMemcpyAsync(dst, src, copy_size, copy_direction, stream);
程序运行截图如下:
代码如下:
#include "cuda_runtime.h"#include "device_launch_parameters.h"#include#include 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;}
转载地址:https://it1995.blog.csdn.net/article/details/111880547 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
表示我来过!
[***.240.166.169]2024年04月15日 14时46分03秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
应届渣渣前端的艰难求职之路
2019-04-30
2021年不可错过的17种JS优化技巧(一)
2019-04-30
2021年不可错过的17种JS优化技巧(二)
2019-04-30
月薪15~20k的前端面试问什么?
2019-04-30
一文学会使用Vue3
2019-04-30
我是如何看Vue源码的
2019-04-30
在 Vue 中用 Axios 异步请求API
2019-04-30
为什么总是面试造火箭呢?做前端真的有这么难么?
2019-04-30
85道 Vue 面试题,内含详细讲解(涵盖入门到精通,自测 Vue 掌握程度)
2019-04-30
如何安装以及使用vsftpd服务
2019-04-30
Linux之磁盘与分区的管理(快速入门)
2019-04-30
LVM逻辑卷------基础命令详解(三分钟入门)
2019-04-30
LVM逻辑卷------详细操作过程(三分钟上手)
2019-04-30
mysql——介绍及安装与基本用法
2019-04-30
MySQL数据库之索引
2019-04-30
MYSQL——事务操作+视图+存储引擎
2019-04-30
Mysql——完全备份+增量备份+备份恢复
2019-04-30
MySQL进阶查询(SELECT 语句高级用法)
2019-04-30
Mysql 之主从复制
2019-04-30
LVS负载均衡------NAT模式
2019-04-30