基于GPU的BLAS库的设计和实现

基于GPU的BLAS库的设计和实现

论文摘要

BLAS(Basic Linear Algebra Subprograms)定义了一组基本的矩阵和向量的操作,包括各种矩阵乘法和矩阵向量乘法,在许多领域有广泛的应用。现在的GPU已经发展为一种多核,多线程,具有杰出的计算能力和很高的存储器带宽,可编程的处理器。GPU可以用来加速许多具有数据并行特征的应用。本文在BLAS通用版本基础上,分析GPU体系结构特点和BLAS函数特征,使用CUDA在GPU上高效实现BLAS库的一些核心操作。本文首先介绍了BLAS函数标准,重点介绍了BLAS库中应用最多的是BLAS2和BLAS3提供的函数,特别是BLAS2中的GEMV和BLAS3中的General Martrix Multiply(GEMM),即通用矩阵相乘。介绍了GPU体系结构特点以及CUDA,包括CUDA的体系结构和常用的优化方法。然后,使用CUDA在GPU上设计和实现了三级BLAS库的核心函数GEMM(通用矩阵相乘)。在实现通用矩阵相乘时,需要考虑两种情况:一种是数据已经拷贝到GPU的显存中的情况。在Geforce GTX 260上,在数据已经拷贝到显存的前提下,算法峰值是65GFLOPS。而GTX 260的双精度峰值是67.068GFLOPS,因此双精度的实现效率达到了97%。另一种是数据没有拷贝到显存中的情况。在大规模矩阵乘法的计算中,数据不能够一次全部的拷贝到显存中。通过数据调度,本文的算法拷贝数据的时间不超过总时间的10%。最后,使用CUDA在GPU上设计和实现了二级BLAS库的核心函数GEMV,即矩阵向量相乘。并且对转置和非转置的双精度版本进行了测试,实验结果表明,本节实现的转置形式在大规模输入的情况下比CUBLAS的实现要快上50%,而非转置形式的性能跟CUBLAS相当。本文中使用的方法对GPU上的高性能BLAS实现有重要的参考意义。

论文目录

  • 摘要
  • ABSTRACT
  • 目录
  • 图目录
  • 表目录
  • 第1章 绪论
  • 1.1 BLAS 库
  • 1.1.1 BLAS 的构成
  • 1.1.2 BLAS 函数介绍
  • 1.1.3 BLAS 主要参数
  • 1.1.4 BLAS 关键函数
  • 1.1.5 BLAS 优化现状
  • 1.2 GPU 的介绍
  • 1.2.1 GPU 发展简介
  • 1.2.2 GPU 与CPU 的差异
  • 1.2.3 GPU 实现
  • 1.2.4 GPU 的着色器模型
  • 1.3 本文的研究内容
  • 1.4 本文结构
  • 第2章 CUDA 介绍
  • 2.1 CUDA 编程模型
  • 2.1.1 主机和设备
  • 2.1.2 内核函数
  • 2.1.3 线程层次结构
  • 2.2 存储器层次结构
  • 2.3 CUDA 软件栈
  • 2.4 CUDA 程序
  • 2.4.1 程序框架
  • 2.4.2 CUDA C 语言
  • 2.4.3 通信机制
  • 2.5 常用的优化方法
  • 2.6 小结
  • 第3章 GPU 上矩阵乘法的设计与实现
  • 3.1 矩阵乘法回顾
  • 3.2 用CUDA 在GPU 上实现矩阵乘法的分析
  • 3.2.1 矩阵乘法分块分析
  • 3.2.2 CUDA 上的矩阵乘法分块分析
  • 3.3 CUDA 上矩阵乘法的设计与实现
  • 3.3.1 普通实现
  • 3.3.2 优化实现
  • 3.3.3 实验结果
  • 3.3.4 大规模矩阵乘法的算法设计
  • 3.4 小结
  • 第4章 矩阵向量乘法的设计与实现
  • 4.1 矩阵向量乘法概述
  • 4.2 矩阵向量乘法的分析和实现
  • 4.2.1 非转置形式
  • 4.2.2 转置形式
  • 4.3 实验结果和分析
  • 4.3.1 参数确定
  • 4.3.2 性能分析
  • 4.3.3 性能测试
  • 4.3.4 小结
  • 第5章 总结和展望
  • 5.1 本文总结
  • 5.2 存在问题和研究展望
  • 参考文献
  • 致谢
  • 在读期间发表的学术论文与取得的研究成果
  • 相关论文文献

    标签:;  ;  

    基于GPU的BLAS库的设计和实现
    下载Doc文档

    猜你喜欢