GPU

GPU,全称为图形处理单元(Graphics Processing Unit),是一种专用于处理图形和图像计算的处理器。起初,GPU主要用于图形渲染,但随着计算需求的增加,尤其是在科学计算、深度学习和其他并行计算领域,GPU的通用计算能力逐渐受到重视。

GPU相对于传统的中央处理单元(CPU)在设计上有一些显著的区别。CPU更适用于处理通用的控制流任务,而GPU则专注于高度并行的数据处理。GPU通常拥有大量的小型处理单元,被设计成能够同时处理大量相似的任务,例如图形渲染中的像素计算或深度学习中的矩阵运算。

总体而言,GPU在图形处理领域的成功应用和对并行计算需求的响应使其逐渐演变成为通用计算设备,广泛用于加速各种科学和工程计算应用。

GPU 并行优化的几种典型策略

如何对现有的程序进行并行优化,是 GPU 并行编程技术最为关注的实际问题。本文将提供几种优化的思路,为程序并行优化指明道路方向。

优化前准备

首先,要明确优化的目标 - 是要将程序提速 2 倍?还是 10 倍?100倍?也许你会不假思索的说当然是提升越高越好。

但这里存在一个优化成本的问题。在同样的技术水平硬件水平下,提升 2 倍也许只要一个下午的工作量,但提高 10 倍可能要考虑到更多的东西,也许是一周的工作量。提高 100 倍, 1000 倍需要的成本,时间就更多了。

然后,需要将这个问题进行分解。通常来说先对数据集进行分解,然后将任务进行分解。这里要从数据集这样的矩阵角度来分析数据,将输入集和输出集中各个格点的对应关系找出来,然后分派给各个块,各个线程。

策略一:识别代码中的瓶颈所在

为何GPU可以用于加速人工智能或者机器学习的计算速度?

一、Why GPU

其实GPU计算比CPU并不是“效果好”,而是“速度快”。

计算就是计算,数学上都是一样的,1+1用什么算都是2,CPU算神经网络也是可以的,算出来的神经网络放到实际应用中效果也很好,只不过速度会很慢罢了。

GPU的起源

GPU全称叫做graphics processing unit,图形处理器,顾名思义就是处理图形的。

电脑显示器上显示的图像,在显示在显示器上之前,要经过一些列处理,这个过程有个专有的名词叫“渲染”。以前的计算机上没有GPU,渲染就是CPU负责的。渲染是个什么操作呢,其实就是做了一系列图形的计算,但这些计算往往非常耗时,占用了CPU的一大部分时间。而CPU还要处理计算机器许多其他任务。因此就专门针对图形处理的这些操作设计了一种处理器,也就是GPU。这样CPU就可以从繁重的图形计算中解脱出来。

由于GPU是专门为了渲染设计的,那么他也就只能做渲染的那些事情。

GPU渲染流水线

GPU的渲染流水线的主要任务是完成3D模型到图像的渲染(render)工作。常用的图形学API编程模型中的渲染过程被分为几个可以并行处理的阶段,分别由GPU中渲染流水线的不同单元进行处理。GPU输入的模型是数据结构(或语言)定义的对三维物体的描述,包括几何、方向、物体表面材质以及光源所在位置等;而GPU输出的图像则是从观察点对3D场景观测到的二维图像。在GPU渲染流水线的不同阶段,需要处理的对象分别是顶点(vertex)、几何图元(primitive)、片元(fragment)、像素(pixel)。

如图1-6所示,典型的渲染过程可以分为以下几个阶段:

1.顶点生成

图形学API用简单的图元(点、线、三角形)表示物体表面。每个顶点除了(x,y,z)三维坐标属性外还有应用程序自定义属性,例如位置、颜色、标准向量等。

2.顶点处理

GPU图像处理的基本流程

现代GPU提供了顶点处理器和片段处理器两个可编程并行处理部件。在利用GPU执行图像处理等通用计算任务时,要做的主要工作是把待求解的任务映射到GPU支持的图形绘制流水线上。

通常的方法是把计算任务的输入数据用顶点的位置、颜色、法向量等属性或者纹理等图形绘制要素来表达,而相应的处理算法则被分解为一系列的执行步骤,并改写为GPU的顶点处理程序或片段处理程序,然后,调用3D API执行图形绘制操作,调用片段程序进行处理;最后,保存在帧缓存中的绘制结果就是算法的输出数据。

虽然数字图像处理算法多种多样,具体实现过程也很不相同,但是在利用GPU进行并行化处理时,有一些共性的关键技术问题需要解决,如:数据的加载,计算结果的反馈、保存等。

下面对这些共性的问题进行分析,并提出相应的解决思路。

1. 数据加载

嵌入式芯片要如何应对真正的AI本地化处理的挑战?

GPU和NNA(神经网络加速器)正在迅速成为AI应用的关键要素。随着不同企业开始挖掘神经网络在各种任务(比如自然语言处理、图片分类)中的潜力,集成人工智能元素的产品数量正在稳步的增长。与此同时,对于这些任务的处理也正在从传统的云端架构转移到设备本身上来,嵌入式芯片中集成了专用的神经网络加速器,可支持本地化AI处理。

Imagination是如何推动汽车革命的

自半导体问世以来,这个行业一直致力于创造出更快更强大的电子器件,虽然这个发展还在继续,但是现今的焦点是让产品变得更加的智能、高效,这一点在汽车行业表现的尤为突出。随着汽车行业向电力驱动方向发展,电子器件在汽车系统中扮演着越来越重要的角色,就像手机已经演变成大家口袋里的超级计算机一样,你的下一辆汽车也将是一台带轮子的超级计算机。

联发科逆袭?Helio P90的AI跑分展示其强大的性能

12月13日,联发科 (MediaTek)在深圳召开了“P90发布会暨全球合作伙伴大会”,这次最新的Helio P90芯片,搭载全新超强的AI引擎 APU 2.0,AI速度大幅度提升。其中,AI性能跑分这一块,通过多个跑分工具展示了目前P90的APU强大的性能。

GPU Raycasting的两种实现方法

Raycasting的核心是从每一个屏幕像素处发射一条光纤,然后让其穿过整个体数据。基于GPU的Raycasting可以独立,并行地计算每条光线,从而能大大提高速度,实现实时绘制效果。绘制时的过程一般是绘制一个长方体,并且以体数据作为三维纹理。

根据光线的方向和终点的确定方法的不同,Raycasting有两种实现:

GPU Raycasting的两种实现方法

1,基于光线起点和相机位置。将相机位置由世界坐标通过模型视图投影矩阵反变换到长方体的局部坐标空间。每个fragment的坐标作为光线的起点,由变换后的相机位置与光线起点确定光线的方向,在沿着光线方向从起点前进时,每到达一个新的点,判断其是否在长方体内,如果不在,则结束这条光线。

什么是离屏渲染?什么情况下会触发?该如何应对?

离屏渲染就是在当前屏幕缓冲区以外,新开辟一个缓冲区进行操作。

离屏渲染出发的场景有以下:
  •   圆角 (maskToBounds并用才会触发)
  •   图层蒙版
  •   阴影
  •   光栅化

为什么要有离屏渲染?

大家高中物理应该学过显示器是如何显示图像的:需要显示的图像经过CRT电子枪以极快的速度一行一行的扫描,扫描出来就呈现了一帧画面,随后电子枪又会回到初始位置循环扫描,形成了我们看到的图片或视频。

为了让显示器的显示跟视频控制器同步,当电子枪新扫描一行的时候,准备扫描的时发送一个水平同步信号(HSync信号),显示器的刷新频率就是HSync信号产生的频率。然后CPU计算好frame等属性,将计算好的内容交给GPU去渲染,GPU渲染好之后就会放入帧缓冲区。然后视频控制器会按照HSync信号逐行读取帧缓冲区的数据,经过可能的数模转换传递给显示器,就显示出来了。具体的大家自行查找资料或询问相关专业人士,这里只参考网上资料做一个简单的描述。