赞
踩
在没有GPU之前,基本上所有的任务都是交给CPU来做的。有GPU之后,二者就进行了分工,CPU负责逻辑性强的事物处理和串行计算,GPU则专注于执行高度线程化的并行处理任务(大规模计算任务)。
GPU并不是一个独立运行的计算平台,而需要与CPU协同工作,可以看成是CPU的协处理器,因此当我们在说GPU并行计算时,其实是指的基于CPU+GPU的异构计算架构。
NVIDIA 和 AMD 是主要的独立显卡制造商,其显卡分别称为N卡和A卡;N卡主要⽀持CUDA编程,A卡主要⽀持OpenCL编程。NVIDIA 公司是GPU界的⻰头,其GPU产品占市场份额的80%左右。
本节推荐看博客 CPU和GPU到底有什么区别?
CPU 和 GPU 的架构如下图所示:
可以形象的理解为:
CPU 有25%的ALU(运算单元)、有25%的Control(控制单元)、50%的Cache(缓存单元)
GPU 有 90%的ALU(运算单元),5%的Control(控制单元)、5%的Cache(缓存单元)
因此二者的架构不同,导致了不同的特点:
CPU: 强控制弱计算,更多资源⽤于缓存
GPU: 强计算弱控制,更多资源⽤于数据计算
因此 GPU 在设计时更多的晶体管用于数据处理,而不是数据缓存和流量控制,,可以高度实现并行计算。
此外,GPU的优势还有:
NVIDIA公司有三个主流的GPU产品系列:
并⾏计算是指使用多个处理器共同解决同⼀个问题,其中每个处理器承担计算任务中的⼀部分内容。
并行计算包括时间并行(流水线式独立工作)和空间并行(矩阵分块计算),需要保证负载均衡和通信量小(CPU和GPU之间的通讯)。
并行计算的前提是应⽤问题必须具有并⾏度,即可以分解为多个可以并⾏执⾏的⼦任务
单独的⾼性能计算节点主要分为:
CUDA (Compute Unified Device Architecture),通用并行计算架构,是一种运算平台。CUDA 由 NVIDIA 公司在 2007 年发布,⽆需图形学API,采⽤类C语⾔,开发简单。
CUDA 是一种专⽤异构编程模型,CUDA是基于C语⾔的扩展,例如扩展了⼀些限定符 device、shared等,从3.0开始也⽀持 C++ 编程。
基于 CUDA 开发的程序代码在实际执⾏中分为两种:
运⾏在 GPU 上的 CUDA 并⾏计算函数称为 kernel函数(内核函数),⼀个完整的 CUDA 程序是由⼀系列的设备端 kernel 函数并⾏部分和主机端的串⾏处理部分共同组成的。
kernel 在GPU上以多个线程的⽅式被执⾏,我们学的 CUDA 编程主要就是学怎么写 kernel 函数
CUDA 的处理流程为:
CUDA 程序执⾏的基本流程为:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。