博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
cuda 异步函数
阅读量:7222 次
发布时间:2019-06-29

本文共 821 字,大约阅读时间需要 2 分钟。

为了提高cuda效率使用异步函数是一个很常规的选择,但是异步函数并没有我自己想象的这么智能。

它要你要异步传输的数据在主机端(host)不能被更改,即异步函数只是指示了一个传输的位置指针,并没有对这个数据进行缓存,到真正需要的时候,才会去主机内存中去寻找这个值。所以在做异步的时候要保证异步传输的主机端不能在异步完成(或者说拷贝完成)之前被修改。要不然这个数据就成了修改后的了。

实验代码如下

#include 
#include
__global__ void async_kernel(int *x){ printf("%d\n",x[0]);}int main(int argc,char *argv[]){ int *x,*xd; cudaStream_t stm; cudaStreamCreate(&stm); cudaMallocHost(&x,sizeof(int)); cudaMalloc(&xd,sizeof(int)); printf("Start\n"); x[0]=1; cudaMemcpyAsync(xd,x,sizeof(int),cudaMemcpyHostToDevice,stm); x[0]=10; async_kernel<<<1,1,0,stm>>>(xd); cudaDeviceSynchronize(); printf("End\n"); fflush(stdout); }

执行效果如下

当然别忘了同步函数 cudaDeviceSynchronize();

 

转载于:https://www.cnblogs.com/reedlau/p/4850967.html

你可能感兴趣的文章
Databricks Scala 编程风格指南
查看>>
Tkinter,label内容随多选框变化
查看>>
PHP开发中的数据类型 ( 第3篇 ) :Heaps
查看>>
网络七层协议
查看>>
4种删除Word空白页的小技巧,都是你需要用到的!
查看>>
单服务器MySQL主从复制实践
查看>>
CentOS 7 root口令恢复
查看>>
| 刘知远:让计算机听懂人话
查看>>
苹果收购初创公司Tueo Health,哮喘监测或将应用到Apple Watch
查看>>
CLR存储过程
查看>>
初级运维(一)
查看>>
C语言字符串常用函数学习(一)
查看>>
Lync Server 2010部署与应用(三)---拓扑生成与发布
查看>>
安全摘记1:关于安全与黑客
查看>>
我的友情链接
查看>>
tbox中vector容器的使用
查看>>
一个简单的PHP笔试题
查看>>
firebug重新载入页面获取源码
查看>>
我的友情链接
查看>>
5月末周中国.COM总量净增1.2万个 美国净减2.6万个
查看>>