计算机视觉学习(一)——CUDA介绍及基础入门
CUDA :计算统一设备架构(Computer Unified Device Architecture, CUDA)是由英伟达(NVIDIA)开发的一套并行计算平台和编程模型。它只支持NVIDIA GPU卡。
CUDA可以使用简单的编程API在图形处理单元(GPU)上创建大规模并行应用程序。而且,CUDA允许程序员指定代码的哪个部分在CPU上执行,哪个部分在GPU上执行。
1.1 并行处理
我们需要可以快速运行的处理器以超高的时钟速度、较小的面积和最小的功率执行多项任务。过去都是随着晶体管的尺寸逐渐减小,一个芯片上可以封装更多的晶体管,导致时钟速度的不断提高。但是最近几年时钟速度几乎保持不变,这是因为时钟速度恒定的背后是高功率损耗和高时钟速率。小的晶体管在小面积内封装和高速工作将耗散大功率,因此它是很难保持处理器的低温。开发中随着始终速度逐渐饱和,我们就需要新地计算模式来提高处理器的性能了。
可以这么理解,假如现在要在很短的时间里挖一个很大的坑,有三种方法完成这项工作:
(1)挖得更快
(2)换一把更好的铲子
(3)雇佣更多的挖掘机。
第一种选择类似与更快的时钟,第二种类似于拥有更多可以在每个时钟周期做更多工作的晶体管,但是功耗限制了这两个步骤。第三种类似于拥有许多可以并行处理任务的更小更简单的处理器,而CPU遵循了这种计算模式。他不是一个可以执行复杂任务的更强大的处理器,而是有许多小而简单的且可以并行工作的处理器。
1.2 GPU架构和CUDA介绍
GPU刚开始是被开发来用于显示器上渲染高端图形的,只用在像素计算上,后来发现GPU既然可以做像素计算就可以做其他的数学计算,这些GPU就被称为通用GPU(GPGPU)。
CPU和GPU的硬件架构有什么不同呢?
CPU具有复杂的控制硬件和较少的数据计算硬件,复杂的控制硬件在性能上提供了CPU的灵活性和一个简单的编程接口,但是就功耗而言,这个成本是非常高的。GPU具有简单的控制硬件和更多的数据计算硬件,让他具有并行计算的能力,这种结构更加节能,缺点是它有一个更严格的编程模型。在GPU计算的早期,OpenGL 和DirectX 等图形API是与GPU交互的唯一方式。但是这两个API的使用是非常复杂的,于是这促成了CUDA编程架构的开发。
任何硬件架构的性能都是根据延迟和吞吐量来度量的。延迟是完成给定任务所花费的时间,而吞吐量是在给定时间内完成任务的数量。正常的串行CPU被设计为优化延迟,而GPU被设计为优化吞吐量。
1.3 CUDA架构
所有的GPU都有许多被称为核心(Core)的并行处理单元。这些核心被分为流处理器和流多处理器。GPU有这些流多处理器的网格。CUDA程序是作为一些并行运行的多线程(Thread)来执行的,每个线程都在不同的核心上执行,可以将GPU看作多个块(Block)的组合,每个块可以执行多个线程。
CPU及其内存称为主机(Host),GPU及其内存称为设备(Device)。CUDA代码包含主机和设备的代码。
1.4 CUDA开发环境
1⃣️支持CUDA的GPU:CUDA架构只支持NVIDIA GPU
2⃣️英伟达显卡驱动程序
3⃣️标准C编译器
4⃣️CUDA开发工具包