GPU 与 CUDA 简介

一、计算机基础知识

我们知道, 一台 电脑 主要由四部分组成: CPU (Central Processing Unit), 内存 (Main Memory), 硬盘 (Data Storage) 和 IO 设备 (Input / Output Device)。

1.1 硬盘 与 IO 设备

IO 设备 的种类是最多的, 包括 键盘 (keyboard), 鼠标 (mouse), 手柄 (game controller), 显示器 (monitor), 声卡 (sound card), 网卡 (network inference controller) 等等。我们常说的 驱动 (device driver) 就是使得这些 设备 可以在电脑上正常运行的 程序, 常见的有: 声卡驱动, 网卡驱动, 打印机驱动, 鼠标驱动 等等。

硬盘 就是我们存储数据的地方, 常见的类型有: 光盘 CD (compact disc), 闪存 (flash memory), 机械硬盘 HDD (hard disk drive), 固态硬盘 SSD (solid-state drive) 等等。

光盘 一般是 只读 的, 即电脑只能读取光盘中的内容, 不能写入。如果要写入, 则需要其它设备辅助。我们将写入的过程称为 刻录 (authoring)。因此, 光盘也被称为 ROM (read-only memory)。

我们平常使用的 U 盘 (USB flash drive), 各种 存储卡 (memory card), 以及 固态硬盘 SSD 都属于 闪存。相较于 固态硬盘 HDD, 其具有 读写速度快, 功耗低, 价格贵等特点。

1.2 CPU 与 内存

学过 计算机组成原理 的应该知道, CPU 主要由 控制单元 CU (Control Unit) 和 运算单元 ALU (Arithmetic Logic Unit) 构成。

控制单元 (CU) 的主要功能有:

也就是说, 虽然 CU 和 ALU 都在 CPU 中, 但是真正起控制作用的是 CU。

在 CPU 中, 除了 CU 和 ALU 外, 还有 存储单元, 主要包括 寄存器 (register) 和 多级缓存 (cache)。只有当数据在特定的 寄存器 时, ALU 才能进行计算, 如果不在, 就需要从 内存 中拉取数据。然而, 拉取数据的速度是十分缓慢的, 因此, 我们需要 多级缓存, 将常用的数据放在缓存中, 可以减少访问 内存 的次数。

一般情况下, 电脑中的 多级缓存 是用 SRAM (static random-access memory) 构建的, 内存 是用 DRAM (dynamic random-access memory) 构建的。因此, 很多时候, 我们会用 SRAM 代指 多级缓存, DRAM 代指 内存。

上面所说的 CPU 是 计算机组成原理 中所说的 CPU, 现在基本采用 前端解码 + 后端执行 的架构, 并不会有一个专门的模块叫 CU。同时, 我们可以将上述内容理解为一个 CPU core。现在的 CPU 一般都是 多核 的, 也就是说是由多个上述架构构成的, 我们称之为 multicore CPU

在计算机中, 一般用 时钟周期 (clock cycle) 作为计时单位, 一个 运算指令 一般在几个 时钟周期 内就可以完成, 而从内存中加载数据, 则需要几百个 时钟周期。在设计指令集时, 一条指令对应的 时钟周期 一般是确定下来的。

那么, 时钟周期 和 现实中的时分秒 怎么转换呢? 答案是看 CPU 的 主频 (frequency)。它的单位是 Hz (赫兹), 表示 一秒内的周期数。比方说, 2.20GHz 表示的就是一秒内有 2.2×109 个周期, 那么一个周期对应 12.2×109 秒。不同型号的 CPU 对应的主频是不相同的, 主频越高, 一个 时钟周期 就越短, 对应的运行效率也就越高。