HetCompute Parallel Processing Tutorial(一)

一、抽象

1)、Tutorial中,介绍了并行编程的一般原则,重点介绍了基于任务的并行编程模型。首先引入缩放作为评估算法可以获得的潜在加速的度量。引入了不同的并行编程范例,并对并行代码进行了许多优化。我们提供一些例子程序来说明HetCompute编程模型。

二、并行加速比

1)、Amdahl提出一个论点,即并行算法可以获得的最大加速比由程序的序列分数限制。直白一点说的话,即使HetCompute能够无限快地执行并行分数(零时间),序列分数也将决定总执行时间。当考虑N个并行处理器时,这个论点,通常称为Amdahl定律,可以通过以下等式进行总结: 

                                                   

2)、其中s + p = 1,分别代表程序的串行和并行部分。使用Amdahl定律,可以通过八个处理器获得的加速作为序列分数的函数,如图Amdahl所示:

                                  

3)、请注意,即使序列分数仅为10%,可实现的最大理论加速比为4.58。然而,在实践中,硬件架构特性(例如高速缓存)允许程序员从多核系统获得更好的性能。Amdahl定律表示针对常数问题规模(强缩放)的性能提升。 Gustafson证明了并行处理可以通过增加问题大小在相同的时间内执行更多工作,从而提高可伸缩性。 这种技术称为弱缩放。Artifacts架构也扮演者一个重要的角色。额外的处理器带有额外的缓存和内存资源,通常使应用程序能够获得超线性加速。讨论的这些优化,他们利用了Section Optimizations中的架构特性。

三、并行程序范式

1)、当我们讨论并行计算程序的时候,一些比较随意的松散的架构组织从业者们会对不同类型的并行计算进行分类。

2)、并行数据(SIMD)

a、SIMD引擎包含矢量单元,阵列处理器和GPU。在此模型中,程序在不同的数据元素上执行相同的代码。 数据并行算法通常表示为多维阵列上的操作。控制流程是均匀式分布;

b、但是,某些元素的操作可能会被屏蔽掉。 图像处理算法是数据并行的典型。 在当前版本的HetCompute中,可以通过使用矢量内在函数来定位NEON单元,或者通过调用OpenGL函数在GPU上执行来利用数据并行性。

c、未来版本的HetCompute将支持GPU上的SIMD计算,作为编程模型的一部分。

d、如下提供一个案例,使用HetCompute pfor_each模式和向量运算显示了标量向量乘法(SAXPY)的简单示例。

                            

3)、并行任务(MIMD)

a、MIMD引擎是多处理器。在这个模式下,不同的硬件执行的上下文(如:线程,核,处理器)不同的数据元素执行不同的代码。任务可以是独立的,也可以通过共享数据结构进行协作。 因此,任务可能具有控制或数据依赖性。计算的不规则结构使依赖性和同步的处理复杂化。典型应用包括:物理模拟,计算机模拟,浏览器等。HetCompute支持任务并行性,HetCompute用户手册中提供了samples/src。

b、在如下的示例中,针对n元树数据结构演示了一个简单的并行深度优先遍历(每个节点都有一个存储在子集合中的可变数量的子节点)。hetcompute::pfor_each构造将以递归方式为节点的每个子节点启动任务。 异步释放机制提供了更复杂的任务图的示例。

          

4)、并行编程

a、现在的机器已经将CPU和GPU整合在了一起,用于已沟通用计算。最近,GPGPU(通用GPU)编程出现了显着增长。 编织并行模型将任务并行计算与数据并行执行相结合。该统一模型用于在MIMD单元上执行的并发任务内动态利用SIMD单元和GPU上的数据并行性。 示例包括游戏应用程序,其具有许多并发任务(物理,AI,UI),这些任务由数据并行计算组成,例如粒子模拟,图像处理和渲染。

b、以下示例(伪代码)显示了HetCompute如何同时在CPU,GPU和DSP上执行任务。

           

5)、并行管道或者流

a、分布式处理器体系结构由单独的硬件上下文组成,例如IBM的Cell处理器,旨在利用小型工作集和/或具有较少局部性的算法。计算组作为管道承载体,允许代码驻留在每个单元上和数据流传输。依赖模式是固定的,对并行计算做了简化。调整和平衡由于预定义的计算结构而变得复杂,并且可能需要重大的重组。许多算法在分区时都适合管道并行。 例子包括计算机视觉算法,搜索等。HetCompute支持管道模式,说明此模式的samples / src显示在Pipeline中。

b、HetCompute支持上述所有模型,包括使用hetcompute::pfor_each和GPU任务并行数据,使用任务和组并行任务,通过将任务映射到不同执行单元的编译并行,以及使用hetcompute::pipeline的管道并行性测试。如果算法与其中一个并行模式匹配,则加速的效果非常快。否则,任务图很容易在HetCompute中构造,它们基本上可以表达任何并行计算。 HetCompute用户指南提供了HetCompute并行化构造的详细描述,它们的设计理念和最佳实践

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值