lambda表达式和parallel_for_each表达式

C++AMP的“入口”即parallel_for_each,只有控制线程次数.extent和lambda表达式两个参数。

简单理解任何可以适用表达式的地方都能适用lambda表达式,所有的lambda表达式都会以[]作为前缀,但是方括号可能不会像下面这样为空。这被称为“捕获字句”,()是lambda参数,{}为lambda表达式的内容。lambda表达式不需要写在单独的一行,它的写法没有限制。

std::for_each(v.begin(),v.end(),[](int i) {std::cout<<i<<endl;});

parallel_for_each函数是C++AMP的核心,也是并行操作发生的地方,我们可以构造数组然后给它赋值,也可以构造array_view,std::vector等CPU密集型数据结构中的数据。之后可以使用parallel_for_each遍历数组中的每个元素,或者适用array_view,或者访问部分数据。parallel_for_each的操作extent对象,其控制执行线程的数量。

parrallel_for_each(v.extent,[=](index<1> idx)restrict(amp) {kernel执行体});

 要执行{}里面的内容也简称kernel(运行在GPU上的代码)有以下三个特征:

  1. 返回值类型是void。不管什么计算都应该在一个或多个数组视图中保存。
  2. 要使用restrict(amp)或者restrict(amp,cpu)标记;
  3. 仅能使用amp_math.h含有的函数,也就是说仅调用代码生成时显式使用restrict(amp)或者restrict(amp,cpu)标记的函数;
  4. 参数不能按引用传值(除了数组实例以为),按值传入是可以的。

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值