什么是异构计算?

不同的架构设计的处理器具有不同的特点,而不同的应用也具有不同的特点,应当为不同特点的应用使用不同的处理器,使用一种处理器架构满足各个不同市场的需求是痴心妄想。

为了提高系统的性能,则必须要把应用的特点和处理器的特性相互配合,这就是协同设计。从应用的特点来看,不同的应用具有不同的需求:有的应用需要大量的访问数据;有的应用局部性很好,而有的应用局部性又很差。从不同的处理器的特点来看,不同的处理器适合做不同的事情:如X86 处理器为进行延迟优化,以减少指令的执行延迟为主要设计考量(当然今天的X86 处理器设计中也有许多以吞吐量作为设计考量的影子),编程相对简单,使用了大量的缓存,因此应用易于达到硬件的峰值性能;如NVIDIA GPU和AMD GPU则以以提高整个硬件的吞吐量为主要设计目标,在编程理念和方法上与X86体系具有许多不同。

同一算法在不同的处理器上具有不同的性能瓶颈,这主要是因为不同的处理器的设计理念不同,应用场景也有区别,因此将不同比例的晶体管用在了不同的单元上。比如下图展示了Intel X86处理器和NVIDIA GPU的设计理念差异。

Intel X86处理器将大量的晶体管用于缓存和逻辑控制,因此真正用于计算的晶体管数量反而偏少。而NVIDIA GPU只将很少的晶体管用于逻辑控制,用于缓存的比例则更少,因此能够用于计算的比例就比较高。这两种设计使得在同样数量的晶体管规模下,NVIDIA GPU所能够获得的峰值计算能力远大于X86。由于大量的晶体管用于缓存和控制逻辑,在X86上编程相对容易,简单的代码往往也能获得比较好的性能,降低了为了获得更高性能所需要的编程难度。由于不同处理器擅长做不同的事情,因此对于某个固定的算法也需要选择合适的硬件和合适的编程模型以将算法很好地映射到硬件上执行。

对于某个具体算法的异构并行化过程,可以分成以下几个环节:

1) 为算法选择合适的硬件和编程模型,如前面所述:硬件具有不同的特性,而应用的各个部分也有不同的特点,如何选择合适的异构并行平台和编程模型以将算法的各个部分和硬件平台相匹配。

2)  将算法的不同部分划分给异构并行平台上多个处理器计算,异构平台上通常具有多种不同的处理器,每个处理器擅长的任务通常也不相同,如CPU+GPU的异构平台上,CPU适合处理逻辑复杂的计算,而GPU适合处理数据并行的计算密集型运算,如何将算法的各个部分分配给不同的处理器以获得更好的性能使我们需要考虑的一个问题。

3)  将分配给某个处理器的计算高效地映射到处理器硬件上,对于异构平台上每个处理器来说,要发挥其峰值性能需要的编程方法可能并不相同,要尽量将算法和硬件的架构细节相协调,以充分发挥硬件的性能。

4)  对算法的实现进行性能分析,如果性能不如预期,分析性能瓶颈产生在什么地方,然后依据性能瓶颈优化算法或实现,返回1,2,3修改算法设计细节,进一步提升性能,周而复始,直到算法性能达到极致。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值