GPU软件栈

yuanheci 2025年05月31日 27次浏览

视频讲解:
GPU体系结构通俗易懂版:
https://www.bilibili.com/video/BV1P44y1V7bu/?spm_id_from=333.1007.top_right_bar_window_history.content.click&vd_source=4b3e800f3be3fbabb11c99c759de12aa

GPU体系结构基础:
https://www.bilibili.com/video/BV1nmDaYZEq3?spm_id_from=333.788.videopod.sections&vd_source=4b3e800f3be3fbabb11c99c759de12aa

对应书pdf:
General-Purpose Graphics Processor Architecture

知乎大佬:General-Purpose Graphics Processor Architecture 翻译计划


GPGPU

  GPGPU(通用计算图形处理器,General-Purpose Computing on Graphics Processing Units) 是指将原本专为图形渲染设计的 GPU(图形处理器)用于通用计算任务,而非传统的图形渲染。
  它利用 GPU 的大规模并行计算能力(数千个计算核心),加速科学计算、数据处理、深度学习等非图形领域的应用,弥补了 CPU 在并行计算上的性能局限。


CUDA Toolkit是完整的软件包(包含nvcc编译器,library,以及runtime),与CUDA Driver版本有依赖关系。

分层架构

从体系结构的组成来说,CUDA 包含了三个部分:

  • 开发库 (Libraries):它是基于 CUDA 技术所提供的应用开发库。CUDA 包含两个重要的标准数学运算库——CUFFT(离散快速傅立叶变换)和 CUBLAS(基本线性代数子程序库)。这两个数学运算库解决的是典型的大规模的并行计算问题,也是在密集数据计算中非常常见的计算类型。

  • 运行时 (Runtime):提供了应用开发接口和运行期组件,包括基本数据类型的定义和各类计算、类型转换、内存管理、设备访问和执行调度等函数。例如:
    运行时 API:提供了一系列函数,用于执行设备内存分配、内核启动、事件管理、流控制等操作。
    核函数:这是在 GPU 上并行执行的函数,由开发者编写,用于执行具体的并行计算任务。

  • 驱动 (Driver):驱动程序层位于硬件层之上,是 CUDA 架构中的中间件,负责硬件抽象、资源管理、错误处理、CPU 和 GPU 通信。驱动程序层通过 CUDA 运行时 API 与主机代码交互。

image


glibc 与 CUDA Runtime 的对比

相似性:均为运行时库(Runtime Library)

定位:

  • glibc:为CPU 通用计算提供运行时支持(如内存分配、系统调用封装)。
  • CUDA Runtime:为GPU 异构计算提供运行时支持(如 GPU 内存管理、核函数调度)。

核心功能:
两者都封装了底层硬件 / 系统的复杂性,向上层应用提供抽象 API。
均涉及内存管理(glibc 的malloc vs. CUDA 的cudaMalloc)。