GPU上大规模稀疏矩阵特征值计算高效算法之一——GPU介绍

来源:互联网 发布:dialog数据库 编辑:程序博客网 时间:2024/05/18 06:28

GPU主要特点

1. 高吞吐量。

2. 拥有数百个硬件处理单元,性能达到1Tflops。

3. 每个处理单元深度多线程,即使有的线程被stall了,GPU还能够继续正常执行。

4. 高memory带宽。

GPU结构特性

1)硬件模型


2)线程块网络


3)存储器层次结构


GPU工作模式

1)CPU 具有独立的内存和寄存器,GPU也具有独立的显存和寄存器。CPU作为主控制器,CPUGPU 协同处理任务,GPU主要处理可以高度并行的数据处理任务,CPU则负责逻辑处理和串行计算相关任务。

2)GPU上的程序被称为内核函数,也叫kernelkernel是并行执行的程序段。在一段程序中可以有多个内核函数,每个内核函数内部都是并行执行的,但是各个kernel之间确是是串行执行的,其中还可以穿插CPU代码段。

3)CUDA程序执行步骤:CPU完成初始化工作,将参与并行运算的数据拷贝到显存中,GPU上启动内核函数,在GPU上执行并行运算程序,GPU运算完成后将数据结果由显存传送回CPU内存。在程序设计中应尽量少使用分配内存,拷贝数据等涉及到CPUGPU 数据交换的这些命令。GPU的硬件特性使得blockblock之间的通信很难,但是CUDA中的全局存储器允许多个GPU或者同一个GPU的多个block同时对一块存储空间进行访问。

GPU编程模型

1)CUDA中的基本逻辑执行单位:网格(grid)、线程块(block)、线程(thread)和线程组(warp )

2)一个内核函数对应一个网格。一个网格中有多个block,block是内核函数执行的基本单位,线程块之间是无序并行执行的,并且不同的线程块之间是没办法相互通信的。

3)一个block可最多由512个线程构成。线程是CUDA编程模型中可以分配的最小单位,也是资源最终的持有者。每个线程都有独立的registerlocal memory,同一个线程块的线程之间可以相互进行细粒度通信。

4)warpCUDA 程序运行时的实际执行单位CUDA架构中一个warp32 个线程组成。

5)GPU编程有两个主要平台,一个是OpenCL,编程方式类似OpenGL的产业标准,还有另一个是为了C/C++ 的CUDA,在NVIDIA的GPU上编程。

GPU的适用范围

1. 内核中有很多并行线程的应用。

2. 对于线程间的数据交换都发生在kernel调度空间中的相邻线程之间的应用,因为这样就可以用到per-block shared memory。

3. 数据并行的应用,多个线程做相似工作,循环是数据并行的主要来源。

4. 做同步操作较少的应用。

什么应用不适合GPU

1. 并行度小的应用,如需要的线程数小于100个,那么使用GPU加速效果不明显。

2. 不规则的任务并行---尽管应用需要很多线程,但是这些线程都做不同的工作,那么GPU不能得到有效的利用。不过这也依赖于具体工作,多久对线程调度一次,加速的可能仍然存在。

3. 频繁的全局同步,这要求全局的barrier,带来很大性能开销。

4. 在线程之间,会出现随机的点对点同步的应用。GPU对这个的支持不好,通常需要在每次同步的时候做一个全局barrier,如果要利用GPU,最好重构算法避免出现这个问题。

5. 要求计算量(相比于数据传输量)少的应用。尽管在CPU+GPU计算结构中,GPU可以带来计算性能的提升,但是这些提升都被向GPU传输数据所消耗的实践覆盖了。举个例子,对于两个向量求和运算,如果非常大的向量的话,一般都选择在CPU上算,否则传输到GPU上的时间开销很大。




1 0
原创粉丝点击