GPU 是怎样工作的?

174 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第18天,点击查看活动详情

显卡设计

计算机显卡在设计之初主要是为了解决实时渲染三维图像的问题,实时是指可以以很快的速度显示图像,而不是显示播放已经预先录制好的视频,实现渲染那对任何一款游戏来说都非常重要,因为计算机屏幕上生成的图像,都是对玩家操作的实时反馈。

对于能否实时生成图像,就涉及到了一个计算量的问题,任何在屏幕中显示的三维物体,首先要进行重重的坐标变换,根据观察的角度,以正确的透视投影显示出来,并且物体的表面会受到环境中各种光线的影响,呈现出不同的颜色和阴影,这包括光线的漫射、折射、投射、散射等。

假设我们在一个全高清的显示屏中实时生成的图像,每一帧就有 1920*/1080 = 2,073,600,一共二百多万个像素点。每一秒假设生成60帧图像来保证动画的流畅度,那么每一帧就大概有1.6亿个像素点参与计算,这样庞大的计算量。如果仅仅用一个普通八核心的CPU来计算肯定会超时,而GPU有数千计算核心构成的高级CPU,这些核心能够同时对不同的像素点并行运算。

2.jpg

GPU 功能

GPU除了被用于图像计算外,还被广泛的运用在机器学习和深度学习中,这是因为深度学习本质上是一个运算量非常巨大的数学模型,而GPU上的数千个核心可以将在这个数学模型进行拆解成细小的任务,并对它们进行并行计算。

GPU还能对视频进行快速解码,这也就是为什么我们可以边看视频边玩游戏,而丝毫不会增加CPU的负担,GPU上的硬件解码器是可以对视频数据进行快速解码。

显卡编程

  1. 并行计算:CUDA、OpenCL、OpenACC,使用它们我们可以对图形进行处理,或是进行高效、密集的数学运算,制作实时的电影特效,以及训练深度学习网络

3.jpg 2. 图形编程:利用显卡来实时生成三维图像。OpenGL、DirectX、Vulkan三大API

4.jpg