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

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

void vecAdd(float* A, float* B, float* C, int n)
{
array<float,> AA(n), BA(n);
array<float,> CA(n);
copy(A,AA);
copy(B,BA);
parallel_for_each(CA.get_extent(),
[&AA,&BA,&CA](index<> 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<> 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().

8.2 C++ AMP advanced concepts的更多相关文章

  1. Part 3 - Advanced Concepts(11-13)

    https://simpleisbetterthancomplex.com/series/2017/09/18/a-complete-beginners-guide-to-django-part-3. ...

  2. (转) [it-ebooks]电子书列表

    [it-ebooks]电子书列表   [2014]: Learning Objective-C by Developing iPhone Games || Leverage Xcode and Obj ...

  3. Code First :使用Entity. Framework编程(6) ----转发 收藏

    Chapter6 Controlling Database Location,Creation Process, and Seed Data 第6章 控制数据库位置,创建过程和种子数据 In prev ...

  4. [翻译] Autofac 中注册的概念

    原文链接:http://docs.autofac.org/en/latest/register/registration.html 所谓注册组件,是指创建 ContainerBuilder 的实例,并 ...

  5. TN035: Using Multiple Resource Files and Header Files with Visual C++

    TN035: Using Multiple Resource Files and Header Files with Visual C++ This note describes how the Vi ...

  6. [z] 人工智能和图形学、图像处理方面的各种会议的评级

    转载自:『http://www.cvchina.info/2010/08/31/conference-ranking-byar/』 澳大利亚政府和澳大利亚研究理事会做的,有一定考价值. 会议名称 会议 ...

  7. C++程序结构---1

    C++ 基础教程Beta 版 原作:Juan Soulié 翻译:Jing Xu (aqua) 英文原版 本教程根据Juan Soulie的英文版C++教程翻译并改编. 本版为最新校对版,尚未定稿.如 ...

  8. Understanding Convolution in Deep Learning

    Understanding Convolution in Deep Learning Convolution is probably the most important concept in dee ...

  9. TestNG超详细教程

    testNG官网:http://testng.org/doc/download.html howtodoinjava.com里的testNG教程,简单详细:http://howtodoinjava.c ...

随机推荐

  1. 谈谈js中for in 需要注意的地方

    js中for in 可以遍历对象或数组的显性属性,也就是说我们自己定义的属性是可以遍历的,那些原型上默认已有的属性,例如:Object.prototype.toString.Object.protot ...

  2. spoj 2

    筛选法找素数  数据范围很大  1 <= m <= n <= 1000000000  一开始不知道怎么做  查了一下 先筛选出40000内的素数 再依靠这些素数筛选题目要求的素数 # ...

  3. CF 136B Ternary Logic

    http://codeforces.com/problemset/problem/136/B 题意 :就是说tor是一个三进制的运算,代表的是两个三进制数的运算,两个三进制数按位逐一相加后对三取余,没 ...

  4. 关于DJANGO和JAVASCRIPT的时间

    最近,实际一些简单统计时,要到库里去检索数据出来用HIGHCHARTS画图, 作一个简单的回照.. DJANGO用TEMPLATEVIEW来作.专业,正规:) class SAView(Templat ...

  5. Java 向Hbase表插入数据异常org.apache.hadoop.hbase.client.HTablePool$PooledHTable cannot be cast to org.apache.client.HTable

    出错代码如下: //1.create HTablePool HTablePool hp=new HTablePool(con, 1000); //2.get HTable from HTablepoo ...

  6. perl杂项

    perl -pi -e 's|googleapis.com|useso.com|g' `find ./ -type f` yingc@yingc:~/gcyin/test/thirdparty/ffm ...

  7. aop aspect

    所以“<aop:aspect>”实际上是定义横切逻辑,就是在连接点上做什么,“<aop:advisor>”则定义了在哪些连接点应用什么<aop:aspect>.Sp ...

  8. SQL盲注修订建议

    一般有多种减轻威胁的技巧: [1] 策略:库或框架 使用不允许此弱点出现的经过审核的库或框架,或提供更容易避免此弱点的构造. [2] 策略:参数化 如果可用,使用自动实施数据和代码之间的分离的结构化机 ...

  9. foreman1.3安装

    一.环境: centos 6.3 64bit 二.安装yum源: rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release ...

  10. JavaScript DOM高级程序设计 5动态修改样式和层叠样式表1(源代码)--我要坚持到底!

    W3C DOM2样式规范 现在这边贴出本章要的源代码,注意要结合前面用到的ADS库http://vdisk.weibo.com/s/Dq8NU CSSStyleSheet对象属性: type :始终是 ...