博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
8.2 C++ AMP advanced concepts
阅读量:6901 次
发布时间:2019-06-27

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

C++ AMP一些更高级的概念:

1. device内存的分配和拷贝.

void vecAdd(float* A, float* B, float* C, int n){  array
AA(n), BA(n); array
CA(n); copy(A,AA); copy(B,BA); parallel_for_each(CA.get_extent(), [&AA,&BA,&CA](index<1> i) restrict(amp) { CA[i] = AA[i] + BA[i]; }); copy(CA,C);}

array<T,Dimesion>的作用是分配 Accelerator memory,类似于cudaMalloc().

copy(source,destination)的作用是拷贝内存动作,可以在host和Accelerator之间来回拷贝,类似于cudaMemcpy().

这两者加起来的功能就是array_view<>.

另外注意到执行完kernel计算后,拷贝CA数据回host C, 但是并没有执行CV.synchronize()动作,其实copy有隐式同步的功能.

2. host和accelerator异步执行

上面的代码host和accelerator的执行顺序如下图:(左边的是host,右边的是accelerator)

accelerator设备在执行compute的时候,host可以同时执行其他的动作,比如下面的代码:

parallel_for_each(CA.get_extent(),  [&AA,&BA,&CA](index<1> i) restrict(amp)  {    CA[i] = AA[i] + BA[i];  });  completion_future done = CV.synchronize_async();  otherProcessing(A,B);  done.get();

completion_future done关联CV的操作. done.get()等待,直到关联的异步操作完成为止.

这个代码的执行顺序图如下:

可以看到,在accelerator执行计算的时候,cpu在执行otherProcessing().

 

 

转载地址:http://njpdl.baihongyu.com/

你可能感兴趣的文章
WinDbg双机调试配置
查看>>
.net断点续传的原理
查看>>
仿微博php生成短网址
查看>>
前端开发必备站点汇总
查看>>
SQL语句熟悉
查看>>
Android:多语言对应实现
查看>>
计蒜客 宝藏 (状压DP)
查看>>
开个小灶——turtle 海龟图形
查看>>
C++11 auto and decltype
查看>>
微信小程序 页面跳转navigator与传递参数
查看>>
常用正则表达式速查表
查看>>
Lua模式匹配
查看>>
poj 1251
查看>>
spring_3最小化Spring XML配置
查看>>
Struts 基础开发---day02
查看>>
Codeforces 456C - Boredom(简单DP)
查看>>
IE9 打不开界面也不报错,只有打开控制台才会显示 - console
查看>>
String,int,Integer,char 类型转换
查看>>
[LeetCode] Permutations II 解题报告
查看>>
20921进程的描述与控制
查看>>