论文部分内容阅读
随着互联网的兴起与发展,全球数据量快速增长,逐步进入大数据时代。在大数据时代,互联网、金融等各个行业,利用计算机对海量数据进行分析统计和数据挖掘非常重要,由于数据量的快速增长,对其进行分析需要更高的计算性能,现有的单节点计算机性能已经不能满足要求,目前的超级计算机都采用集群和异构计算芯片相结合的方式来提供强大的计算性能。 为了更方便的利用集群的计算性能,现有程序通常基于分布式框架编写。目前常用的分布式框Hadoop和Spark都更注重集群整体性能提升,不支持计算节点上的GPU资源。随着近年来GPU、MIC等异构芯片的使用,单节点性能越来越高,如何保证编程简洁性的同时充分发挥集群的计算性能,一直是分布式框架需要解决的问题。 本文针对这一问题,提出了结合Hadoop和Spark程序自身特点与源源变换的解决方案,通过在Hadoop和Spark框架中添加源源变换功能,使得用户在不用对原有程序做任何修改或仅需少量修改的情况下,可以使程序利用集群中的GPU等资源加速其计算。 本文的主要工作和贡献如下: 1.提出结合分布式框架计算任务的特点,利用源源变换自动生成相应的OpenCL代码,使得该部分计算在GPU等异构芯片上执行。 2.在Hadoop框架上应用并实现该方法。对Hadoop框架计算任务的特点进行分析,发现Map计算任务中对的隐式并行处理的特点,提出并实现利用源源变换将相应的Map任务自动移植到GPU等芯片上执行的方案; 3.在Spark框架中应用并实现该方法。分析Spark框架中RDD计算的特点,发现Spark中RDD的计算具有与Hadoop中Map任务相同的特点,都存在隐式并行的情况。依据此特点提出并实现同样利用源源变换将Spark程序中部分计算自动移植到GPU等芯片上执行的方案。除了解决隐式并行模式的GPU代码自动生成外,通过针对Scala函数式语言的特征提取特定函数的提取机制和运行时翻译的方法,将Spark中Map处理移植到GPU上; 4.设计实验,验证了本文提出的针对Hadoop和Spark框架的代码自动生成方案的可行性,并测试了相应的效果。