8.1.C++ AMP简介
C++ AMP是专为设计支持C++的异构并行模型.
全程是: Accelerator Massive Parallelism
下面是一个Vector C++ AMP的代码,通过这段代码来解释C++ AMP的语法:
#include <amp.h>
using namespace concurrency;
void vecAdd(float* A, float* B, float* C, int n)
{
array_view<float,> AV(n,A), BV(n,B);
array_view<float,> CV(n,C);
CV.discard_data();
parallel_for_each(CV.get_extent(), [=](index<> i)
restrict(amp) {
CV[i] = AV[i] + BV[i];
});
CV.synchronize();
}
1. 头文件amp.h 提供需要用到的函数等的声明
2. using namespace concurrency 作用域包含AMP的函数和类.
3. 模板array_view<T, D> AV<size, name>, T表示数据类型, D表示dimension维度, size表示变量大小,name表示变量名.这个模板的作用就是提供对C++数组的引用,提供一种新的方式访问现有的数组. 可以看出变量 A 和 B是一维的.
4. CV.discard_data(); 表示当前数组C中的数据值是无关紧要的,我理解为可以被覆盖.
AMP kernel函数
parallel_for_each(CV.get_extent(), [=](index<1> i)
restrict(amp) {
CV[i] = AV[i] + BV[i];
});
1. parallel_for_each指定一个计算应用到指定的数据集合中,
2. CV.get_extent(): 就是指定的数据集合,当前实例中,CV是一维的,数据集合的范围是[0,n-1].
3. 第二个参数: [=](index<1> i, 这是一个C++的lambda 表达式:
"=" 这个我理解的是: 把 i索引的数据拷贝到device空间中供kernel函数使用,这个有待进一步考证
关于index<1> i 表示一维的索引,i 表示的是threadIdx.x全局的线程id. 关于这个 index的用法,下面有几个示例有助于理解:
eg1: 这个表示一维索引第2个元素,索引从0开始算起
int aCPP[] = {, , , , };
array_view<int, > a(, aCPP);
index<> idx();
std::cout << a[idx] << "\n";
// Output: 3
eg2: 这个表示二维索引,idx中的第一个元素表示行,第二个元素表示列,所以这个索引的是第二行第三列
int aCPP[] = {, , ,
, , };
array_view<int, > a(, , aCPP);
index<> idx(, );
std::cout << a[idx] << "\n";
// Output: 6
eg3:
int aCPP[] = {
, , , , , , , , , , , ,
, , , , , , , , , , , };
array_view<int, > a(, , , aCPP);
// Specifies the element at 3, 1, 0.
index<> idx(, , );
std::cout << a[idx] << "\n";
// Output: 8
4. restrict(amp) 类似cuda中的"__device__" 表示运行在device上的kernel函数.
5. CV.synchronize(); 同步,等待kernel函数执行完成.
关于C++ AMP的更多信息可以参考这个网址:
https://msdn.microsoft.com/zh-cn/library/hh265137.aspx
8.1.C++ AMP简介的更多相关文章
- ASP.NET Core 1.1 简介
ASP.NET Core 1.1 于2016年11月16日发布.这个版本包括许多伟大的新功能以及许多错误修复和一般的增强.这个版本包含了多个新的中间件组件.针对Windows的WebListener服 ...
- MVVM模式和在WPF中的实现(一)MVVM模式简介
MVVM模式解析和在WPF中的实现(一) MVVM模式简介 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在 ...
- Cassandra简介
在前面的一篇文章<图形数据库Neo4J简介>中,我们介绍了一种非常流行的图形数据库Neo4J的使用方法.而在本文中,我们将对另外一种类型的NoSQL数据库——Cassandra进行简单地介 ...
- REST简介
一说到REST,我想大家的第一反应就是“啊,就是那种前后台通信方式.”但是在要求详细讲述它所提出的各个约束,以及如何开始搭建REST服务时,却很少有人能够清晰地说出它到底是什么,需要遵守什么样的准则. ...
- Microservice架构模式简介
在2014年,Sam Newman,Martin Fowler在ThoughtWorks的一位同事,出版了一本新书<Building Microservices>.该书描述了如何按照Mic ...
- const,static,extern 简介
const,static,extern 简介 一.const与宏的区别: const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽成宏,推荐我们使用const常量. 执行时刻:宏是预编 ...
- HTTPS简介
一.简单总结 1.HTTPS概念总结 HTTPS 就是对HTTP进行了TLS或SSL加密. 应用层的HTTP协议通过传输层的TCP协议来传输,HTTPS 在 HTTP和 TCP中间加了一层TLS/SS ...
- 【Machine Learning】机器学习及其基础概念简介
机器学习及其基础概念简介 作者:白宁超 2016年12月23日21:24:51 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...
- Cesium简介以及离线部署运行
Cesium简介 cesium是国外一个基于JavaScript编写的使用WebGL的地图引擎,一款开源3DGIS的js库.cesium支持3D,2D,2.5D形式的地图展示,可以自行绘制图形,高亮区 ...
- 1.Hibernate简介
1.框架简介: 定义:基于java语言开发的一套ORM框架: 优点:a.方便开发; b.大大减少代码量; c.性能稍高(不能与数据库高手相比,较一般数据库使用者 ...
随机推荐
- mac下设置maven环境
在mac系统下设置maven环境. 1.首先通过终端打开 .bash_profile 2.设置maven解压后的路径地址 环境变量设置如下: MAVEN_HOME .PATH 两个变量即可 3. ...
- 汇编之FS段寄存器
FS寄存器指向当前活动线程的TEB结构(线程结构) 偏移 说明 000 指向SEH链指针 004 线程堆栈顶部 008 线程堆栈底部 00C SubSystemTib 010 FiberD ...
- C++ 中判断非空的错误指针
最近在写网络上的东西,程序经过长时间的运行,会出现崩溃的问题,经过DUMP文件的查看,发现在recv的地方接收返回值的时候,数据的长度异常的大差不多16亿多字节.而查看分配后的char指针显示为错误的 ...
- PHP set_exception_handler 设置异常处理函数
If you're handling sensitive data and you don't want exceptions logging details such as variable con ...
- 图形学:图像围绕着某个点P(a,b)旋转------白话版
前提:在研究图形时候,我们并没有规定图形的大小,所以任意图形多是支持的,这也另外说明了一点,图形转换和图形的大小没有关系. 如果图像围绕着某个点P(a,b)旋转,则先要将坐标系平移到该点,再进行旋转, ...
- C++ 通过对象方式 、指针方式两种方式去访问成员变量(属性或者方法)
准备 1.在VS中新建一个项目-Viscal C++ ---常规--空项目 2.建立一个.h的头文件 定义一个类 声明其成员(C#中的属性和方法) #include<iostream> # ...
- Android EditText控件行尾为表情时的BUG
今天处理项目上的一个诡异BUG,贴吧Android客户端发贴框是支持表情文字混排的,但是当发贴框的行内容末尾为表情时,尝试在表情后插入文字,就悲剧了:文字其实写进去了,但是不会显示出来.研究了一下,发 ...
- 睡眠--TASK_INTERRUPTIBLE and TASK_UNINTERRUPTIBLE
http://i.cnblogs.com/EditPosts.aspx?opt=1 Two states are associated with sleeping, TASK_INTERRUPTI ...
- 对C#中的web访问mysql数据库的一些知识点进行了整理归纳总结
基本对比 使用方式 使用场合 优缺点 是否需要安装 需要的dll网址 引用方式 程序内引用 程序初期确定使用MySql,前期添加引用 大多数情况下使用在类文件内,多数使用于aspx,ashx等带有后置 ...
- 有关PHP 10条有用的建议
1.使用ip2long() 和long2ip()函数来把IP地址转化成整型存储到数据库里. 这种方法把存储空间降到了接近四分之一(char(15)的15个字节对整形的4个字节),计算一个特定的地址是不 ...