CUDA高性能计算之GPU

之前只接触过CPU集群上的OpenMP和MPI并行优化,对于GPU上的CUDA编程了解甚少,作为一个合格的高性能计算工程师,决定自学一下CUDA编程,这里做一个记录。

GPU和CPU的优劣:

GPU的单精度浮点计算性能要远超CPU的单精度性能。GPU的显存带宽也远超CPU。

CPU+GPU异构模式(GPGPU): 

通常由CPU执行复杂逻辑处理和事务管理等不适合数据并行的计算

由GPU负责计算密集型大规模数据并行计算。

利用GPU强大的处理能力和高带宽弥补了CPU性能不足的计算方式,发掘了计算机潜在的性能,同时在成本和性价比方面有显著优势,但是传统的GPGPU受硬件可编程性和开发方式的制约,应用领域受到了限制,开发难度也很大。

CUD开发

NVIDIA在2007年推出了CUDA(Compute Unified Device Architecture),CUDA不需要借助于图形学API,并采用了比较容易掌握的类C语言进行开发。要开发高性能的GPU通用计算程序,还需要掌握并行算法和GPU架构方面的知识。CUDA采用SIMT(单指令多线程)执行模型,开发CUDA程序时应尽量避免分支,否则性能会急剧下降。

通常进行一次GPU计算,要在多种存储器间进行几次数据传输,要消耗相当多的时间,这导致了较大的延迟,使得GPU不适合一些对实时性要求很高的应用。在最理想的情况下,在所有的存储器传输进行的同时,GPU的各个核心也始终在进行计算,这样就能很好地隐藏各种访存延迟。

函数类型限定符

引入函数类型限定符用来规定函数是在host还是device上执行,以及这个函数是从host调用还是从device调用,限定符有:__device__、__host__、__global__。

__global__前缀表示这一段代码是内核函数,内核函数运行在GPU上,其返回类型必须为void。__global__函数中是每一个线程要执行的语句,但是共享内存和同步的存在,最好将__global__函数理解为对每个block的行为描述。

CUDA和openMP

CUDA和MPI

猜你喜欢

转载自blog.csdn.net/u013313909/article/details/88418193