HetCompute Image Processing Tutorial(二)

一、并行平铺

1),粗化任务粒度的一个简单方法是平铺图像并为每个平铺生成任务。这可以通过直接平铺循环来完成。

    

2),或者通过重新构造代码,保留与串行实现相同的去噪内核,并将其调用并行化。

   

二、使并行处理模式化

1),平铺优化负责处理局部性,因为每个任务将以更大的粒度进行计算。但是,您可能会注意到,每个磁贴都会启动一个任务,然后等待所有磁贴完成。虽然HetCompute在启动许多任务方面很有效,但它还有一个模式API,可以提供更好的负载平衡和资源管理。特别是,对于这个例子,使用了hetcompute::pfor_each构造。

2),内核保持不变,但驱动程序功能被重写:

   

3),分析代码:

a,hetcompute::range <2>定义了一个二维范围,从[0,宽度] x [0,高度]开始,每个维度的步长为TILE_SIZE。每个维度可以有不同的步幅。 该范围用作并行循环的迭代空间。

b.hetcompute::pfor_each()构造表示这是一个并行循环,即所有迭代都可以并发执行。传递一个lambda表达式来封装内核(就像Qualcomm HetCompute在上一节中启动任务一样)。在这种情况下,lambda接受一个参数,即范围内的线性索引。hetcompute::pfor_each模式允许HetCompute聚合任务,因为它适合于平台。

c,hetcompute::index <2>定义了一个二维索引。HetCompute范围知道如何迭代到适当的点。linear_to_index调用返回一个对象,该对象在范围的每个维度中具有适当的坐标。可以使用对象上的[]运算符直接访问它们

d,请注意,循环结束时没有hetcompute::wait_for()。hetcompute::pfor_each是一个同步操作,将在内部等待迭代中的所有任务完成。HetCompute还提供了pfor_each的异步版本,即hetcompute::pfor_each_async(),它应该在计算可以继续时使用,因为它不需要循环中产生的数据,例如,重叠几个图像的去噪。有关hetcompute::pfor_each_async()规范,请参阅HetCompute参考手册。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值