NVIDIA GPU 是基于 CUDA 架构而构建的,要在 CUDA GPU 上编程需要使用 CUDA C 语言,CUDA C 是在 C 上进行了一些扩展,使其能够在 NVIDIA GPU 这样大规模并行机上进行编程
早起 GPU 的主要目标是通过可编程的计算单元为屏幕上的每一个像素计算出一个颜色值,这些计算单元也称为像素着色器。像素着色器根据像素在屏幕上的位置(x,y)以及一些其他的信息,对各种输入信号进行合并并计算出最终的颜色值。后来,输入的颜色其实可以是任意数据,程序员发现可以对着色器进行编程从而对输入值执行任意计算
CUDA 架构
NVIDIA 希望可以使 GPU 可以适用于通用计算而不是只是用传统的图形计算
CUDA 架构包含了一个统一的着色器流水线,使得执行通用计算的程序可以对芯片上的每一个数学逻辑单元(ALU)进行排列,GPU的执行单元不仅可以任意的读/写内存,同时还能访问软件管理的缓存,也称共享内存
但是硬件层面的改进还需要使用面向图形的着色语言(例如 OPENGL 的 GLSL 或者 Microsoft 的 HLSL)来编写计算代码
NVIDIA 使用 C 语言并增加了一小部分关键字来支持 CUDA 架构的特殊功能,CUDA C 就成为了在 GPU 上编写通用计算的编程语言
准备:
支持 CUDA 的 GPU,相应的 NVIDIA 设备驱动程序
之后,由于 CUDA C 应用程序将在两个不同的处理器上执行计算,因此需要两个编译器,一个是 CUDA 工具箱为 GPU 编译代码,一个是 VS 为 CPU 编译代码