cuda 异步函数
2015-10-01 14:16
190 查看
为了提高cuda效率使用异步函数是一个很常规的选择,但是异步函数并没有我自己想象的这么智能。
它要你要异步传输的数据在主机端(host)不能被更改,即异步函数只是指示了一个传输的位置指针,并没有对这个数据进行缓存,到真正需要的时候,才会去主机内存中去寻找这个值。所以在做异步的时候要保证异步传输的主机端不能在异步完成(或者说拷贝完成)之前被修改。要不然这个数据就成了修改后的了。
实验代码如下
执行效果如下
当然别忘了同步函数 cudaDeviceSynchronize();
它要你要异步传输的数据在主机端(host)不能被更改,即异步函数只是指示了一个传输的位置指针,并没有对这个数据进行缓存,到真正需要的时候,才会去主机内存中去寻找这个值。所以在做异步的时候要保证异步传输的主机端不能在异步完成(或者说拷贝完成)之前被修改。要不然这个数据就成了修改后的了。
实验代码如下
#include <stdio.h> #include <cuda_runtime.h> __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();
相关文章推荐
- maven的settings.xml详细说明
- js获取网页选中部分的内容,包含html代码
- bzoj 3333: 排队计划 解决问题的方法
- javascript如何获取当前网页的源码
- 【转】--在Android源码树中添加userspace I2C读写工具(i2c-util)
- 构建高性能WEB之HTTP首部优化
- jg-table 过程2 ( jgTable )
- ramoops具体失败原因来解释驱动寄存器
- 程序猿抱大招
- dictionary
- [CareerCup] 9.11 Parenthesize the Expression 表达式加括号
- zw版·全程图解Halcon控件安装(delphi2007版)
- 多线程编程之pthread_create函数应用
- Mac下Maven环境搭建
- JS获取整个页面的文档
- 圣杯布局
- USACO 2.2.4 Party Lamps
- 用Javascript获取页面元素的位置
- SYN Flood攻击防范技术白皮书
- JavaScript高级程序设计之函数表达式之私有变量之静态私有变量第7.4.1讲笔记