GPU基础 您所在的位置:网站首页 gpu是显卡还是处理器 GPU基础

GPU基础

#GPU基础| 来源: 网络整理| 查看: 265

GPU历史

显卡,顾名思义,最初就是用于显示的,把需要显示的信息传给显示器。既然是传递信号,那就需要制定标准。IBM公司最早制定了VGA(Vedeo Graphics Array)标准, 那时候还是模拟信号,VGA接口主要是把显示内容转变为模拟信号传给显示器。后来有了数字信号,HDMI(High Definition Multimedia Interface)接口流行开来,HDMI是数字信号传输技术,不需要进行数/模,模/数转换,因此信号质量更高,在音频,视频领域的占有率比较高。

如果仅仅停留在显示功能,那显卡就不会有GPU这个名字了。现在显卡的一哥毋庸置疑,就是NVIDIA,然而,回到90年代,那会的NVIDIA还在艰难求生存,市场的一哥是叫一家3dfx的公司。3dfx赋予了显卡新的角色,3D图形加速。在此之前,图形绘制工作是由软件完成的,这样会长时间占用CPU,而且可能效果不好。而3dfx公司推出的第一款Voodoo加速卡,可以通过内部的硬件单元来加速图形的绘制,性能远超竞争对手,在当时一鸣惊人。

虽然3dfx的加速卡很牛,但是这张卡并不是可编程的。当时GPU里面的功能模块都是fixed function单元,专为特定的2D/3D任务设计的,这样的好处是性能好,缺点就是不够灵活。而今天我们看到的GPU,都是通用可编程的,通用可编程显然是更难的一条路,不仅对硬件设计要求更高,需要把各种任务的公共逻辑抽出来做成一条条通用的指针,还多了一个软件的要求。这里就不得不赞叹NVIDIA的决策和能力了,选择了更难的路,还在这条路上获得了空前的成功。

NVIDIA的G80(GeForce 8800)是革命性的一代,首次引入了SM(stream multiprocessor)的结构,用SM代替了fixed function,通过多个SM并行来提升速度。G80是第一个统一图形和计算任务的架构,因此其架构也被称为unified shader architecture,后来也叫Tesla。

G80基本就是我们今天看到的GPU的雏形了,后面NVIDIA也做了很多创新,比较浓墨重彩的一笔是Tensor Core的加入,NVIDIA从SIMT走向了SIMT+DSA。

CPU和GPU的通信MMIO

虽然现在GPU很火,但GPU始终是一个外部设备,计算机架构仍然是以CPU为核心的,CPU负责发号施令,GPU负责埋头干活。

那CPU和GPU是如何通信呢?CPU如何把GPU需要的代码和数据传给GPU呢?

MMIO是如今CPU和GPU通信的主要方式。在MMIO的设计里,有一段物理内存,是专门给外部设备(这里是显卡)的,当CPU访问这段内存时,显卡便会积极响应,进行响应的操作。

以下图片来自Semantics of MMIO mapping attributes across architecture, 里面有对MMIO的详细介绍。

Batch submission

CPU通过MMIO给GPU传递信息,但是信息的频繁传递肯定会影响性能,所以现在的GPU普遍支持batch submission,有一块专门储存命令的buffer,CPU提交的命令会先放到这个buffer里,等达到一定数量后,再提交给GPU的pipeline。

Batched buffer, 图片来自01网站Preemptive scheduling

和CPU一样,GPU也需要支持任务切换,那就需要保存当前任务的运行状态,再切换到下一个任务。GPU采用的方法是状态模型,也就是定义了一组软件和硬件都认可的数据结构,把任务的状态保存到这个数据结构里面。当发生context switch时,GPU加载新的状态结构,保存旧的状态结构。

当然,这只是个粗略的概念,不同厂商的GPU的状态模型也不一样。 NVIDIA没有开源,Intel的01网站有具体介绍他们GPU的Preemptive flow,感兴趣的同学可以看看。

Summary

这篇文章首先介绍了GPU的发展历史,从最初的显示功能,到2D/3D游戏加速,再到可编程,DSA的加入,然后介绍了CPU和GPU是如何协同工作的,通过MMIO来传递信息,batch submission提升交互速度,状态模型来支持抢占式调度。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有