CUDA C编程权威指南 第六章 流和并发
流
cuda流
- 流分为两种类型:1)隐式声明流(空流),2)显式声明流(非空流)
cudaError_t cudaMemcpyAsync(void* dst,const void* src, size_t count,cudaMemcpyKind kind,cudaStream_t stream = 0);
异步拷贝版本cudaError_t cudaStreamCreate(cudaStream_t* pStream);
创建可以显式管理的非空流,返回到pStream中的流就可以被当做流参数供cudaMemcpyAsync
和其他异步的CUDA的api使用- 当异步传输数据时,必须使用固定(非分页的)主机内存,使用
cudaMallocHost
函数或者cudaHOstAlloc
函数 - 在非默认流中启动内核,必须在内核执行配置中提供一个流标志符作为第四个参数:
kernel_name<<<grid,block,shareMemSize, stream>>>(argument list);
- 使用
cudaError_t cudaStreamDesytroy(cudaStream_t stream);
当流中仍然有未完成的工作,cudaStreamDestroy
函数会立即返回,当流中的工作都已经完成时,与流相关的资源将被自动释放 - CUDA的api提供两个函数检查流中所有操作是否已经完成:
cudaError_t cudaStreamSynchronize(cudaStream_t stream);//强制阻塞主机,直到流中所有的操作都完成了
cudaError_t cudaStreamQuery(cudaStream_t stream);//不会阻塞,当所有操作完成时,返回`cudaSuccess`,否则返回`cudaErrorNotReady`
Hyper-Q
- 允许多个CPU线程或进程在单一的GPU上同时启动工作
cudaError_t cudaStreamCreateWithPriority(cudaStream_t* pStream, unsigned int flags, int priority);
设定流的优先级cudaError_t cudaDeviceGetStreamPriorityRange(int *leastPriority, int *greatestPriority);
返回值存放在leastPriority
和greatestPriority
中,如果设备不支持优先级,则返回0
cuda事件
- 事件声明:
cudaEvent_t event;
cudaError_t cudaEventCreate(cudaEvent_t* event);
创建一个事件cudaError_t cudaEventDestroy(cudaEvent_t event);
销毁事件cudaError_t cudaEventRecord(cudaEvent_t event,cudaStream_t stream = 0);
事件在流执行中标记了一个点cudaError_t cudaEventSynchronize(cudaEvent_t event);
等待或测试在指定流中闲钱操作的完成情况,等待一个事件会阻塞主机线程的调用,类似于cudaStreamSynchronize
,但是其允许主机等待流执行的中间点.cudaError_t cudaEventQuery(cudaEvent_t event);
测试一个事件是否可以不用阻塞主机应用程序来完成cudaError_t cudaEventElapsedTime(float* ms, cudaEvent_t start, cudaEvent_t stop);
计算被两个事件标记的CUDA操作的运行时间
流回调
CUDA C编程权威指南 第六章 流和并发相关推荐
- CUDA C编程权威指南 第五章 共享内存和常量内存
共享内存是较小的片上内存,具有较低的延迟(相比全局,低20~30倍),提供更高的带宽(相比全局,10倍) block通信 用于全局内存数据的缓存 __shared__来申请共享变量,如果共享内存大小在 ...
- CUDA C编程权威指南 第四章 全局内存
基础 一般内存的设计:寄存器->缓存->主存->磁盘存储器 GPU内存设计 修饰符 变量名 存储器 作用域 生命周期 float var 寄存器 线程 线程 float var[10 ...
- CUDA C编程权威指南 第七章 调整指令级原语
将程序分为两类:IO密集型和计算密集型 double value = in1 * in2 + in3 乘法后紧跟加法的模式被称为乘加法,或者MAD 简单的编译器会将一个MAD指令转换为:一个乘法指令和 ...
- CUDA C编程权威指南 第三章 CUDA执行模型
基础 每个GPU有多个SM(streaming multiprocessor) 当启动一个grid时,它的block会被分配给多个SM上执行,一个block一旦被调度到一个SM上,则这个block只会 ...
- 《CUDA C编程权威指南》——1.5节总结
本节书摘来自华章社区<CUDA C编程权威指南>一书中的第1章,第1.5节总结,作者[美] 马克斯·格罗斯曼(Max Grossman) ,更多章节内容可以访问云栖社区"华章社区 ...
- 《CUDA C编程权威指南》——3.4 避免分支分化
本节书摘来自华章计算机<CUDA C编程权威指南>一书中的第3章,第3.4节,作者 [美] 马克斯·格罗斯曼(Max Grossman),译 颜成钢 殷建 李亮,更多章节内容可以访问云栖社 ...
- c cuda 指定gpu_《CUDA C编程权威指南》——1.3 用GPU输出Hello World-阿里云开发者社区...
本节书摘来自华章计算机<CUDA C编程权威指南>一书中的第1章,第1.3节,作者 [美] 马克斯·格罗斯曼(Max Grossman),译 颜成钢 殷建 李亮,更多章节内容可以访问云栖社 ...
- 《CUDA C编程权威指南》——2.2 给核函数计时
本节书摘来自华章计算机<CUDA C编程权威指南>一书中的第2章,第2.2节,作者 [美] 马克斯·格罗斯曼(Max Grossman),译 颜成钢 殷建 李亮,更多章节内容可以访问云栖社 ...
- 《CUDA C编程权威指南》——2.4节设备管理
本节书摘来自华章社区<CUDA C编程权威指南>一书中的第2章,第2.4节设备管理,作者[美] 马克斯·格罗斯曼(Max Grossman) ,更多章节内容可以访问云栖社区"华章 ...
最新文章
- 百分点大数据技术团队:乘风破浪 海外数据中台项目实践
- Linux设置SSH登录(SecureCrt)
- 接口应用小玩具-博客园积分排名变动监控工具
- 什么是转向灯?使用转向灯有何技巧?
- android支付宝支付开发过程
- python输入整数n计算并输出1+22+333_Python 经典练习题-016
- 音轨分离软件 Spleeter 使用教程及踩过的坑
- Python数据挖掘与分析——泰坦尼克号
- Arduino Nano技术指标
- 初学unity(简单场景制作)
- usr目录linux,linux之usr目录的概述
- 你若运行,便是晴天!
- 无法启动因为计算机丢失ac1st16,Win7启动CAD时提示丢失ac1st16.dll如何修复
- 计算机电缆价格范围,计算机电缆DJYPVPR价格,报价
- 游戏中的脚本语言原理与发展
- 活动二维码怎么制作?如何将活动内容做成二维码图片?
- 经济型EtherCAT运动控制器(一):功能简介与应用场景
- Python的rabbitMQ
- google 确定某点海拔高_如何查询某个地点的海拔高度,详情介绍
- 【C#】无法从命令行或调试器启动服务,必须首先安装Windows服务(使用installutil.exe)
热门文章
- python爬虫框架源码_python爬虫的基本框架
- 微课|Python程序设计开发宝典(5.2.2):默认值参数
- (PPT)Python程序设计课程教学内容组织与教学方法实践
- 使用Python+pillow绘制矩阵盖尔圆
- python制作手机壁纸_Python爬取手机壁纸图片
- devc中文注释显示问号_Python零基础入门-(如何让人读懂你的代码)文档注释
- 力扣77.组合(JavaScript)
- html5中语义元素的是,在html5中语义元素应用分析
- 华为研制鸿蒙小米呢,直追华为鸿蒙!小米自研发操作系统发布
- 光子 量子 DNA计算机的发展情况,CPU的发展与量子计算机.pdf