论文部分内容阅读
随着图形处理器(GPU)体系结构的发展和计算能力的不断提高,GPU在通用计算领域的计算密集型应用上被广泛使用,以弥补 CPU计算能力不足的弱点。现有基于CUDA的GPU编程方式比较繁琐,往往需要开发人员对程序进行十分耗时的手动性能调优过程。为了降低GPU的编程复杂度,分布式计算领域的MapReduce编程模型被应用到GPU平台上。但是,现有基于GPU平台的MapReduce实现方案存在线程同步开销较大,共享内存利用率不高的问题,当处理数据量增大时,性能急剧下降。 结合GPU体系结构的特点,提出并实现了基于MapReduce模型的GPU编程优化机制,主要包括以下三个方面的内容。为了充分适应GPU的多层存储架构,在线程的执行方式上采用多层归约机制,避免共享内存数据的频繁换出,减少线程同步开销,提高线程的并发执行效率;提出基于归约频率的共享内存数据缓存策略,通过对数据进行预处理,收集应用程序执行过程中生成的中间键值对的频率特征,指导GPU上共享内存资源的分配,以提高共享内存的缓存效果,减少全局内存访问,从而提升线程在归约计算过程中的访存效率;引入CPU与GPU之间的异步数据传输机制,通过对原始输入数据进行分割,并在全局内存上设置两个输入缓冲区,使用两个GPU流实现了数据传输和GPU端计算的异步执行,有效隐藏了I/O时间开销。 在Linux平台和CUDA编程环境下,使用3个典型的MapReduce应用Kmeans、Word Count和Page View Count进行了测试。实验结果表明,基于以上优化机制的MapReduce实现方案,与现有基于局部归约的方案对比,减少了线程同步开销,提高了共享内存的使用效率,降低了输入数据的I/O开销,在整体性能上有明显提升。