Cuda学习1

导言

GPUs使用GPU的好处

图形处理单元(GPU)1在类似的价格和功率内提供比CPU高得多的指令吞吐量和存储器带宽。许多应用程序利用这些更高的功能,在GPU上比在CPU上运行得更快(请参阅GPU应用程序)。其他计算设备,如FPGA,也非常节能,但提供的编程灵活性比GPU少得多。

GPU和CPU之间存在这种能力差异是因为它们在设计时考虑了不同的目标。虽然CPU的设计擅长于以尽可能快的速度执行一系列操作(称为线程)并且可以并行执行数十个线程,但GPU的设计擅长于并行执行数千个线程(分摊较慢的单线程性能以实现更大的吞吐量)。

GPU专门用于高度并行计算,因此设计为将更多晶体管用于数据处理,而不是数据缓存和流控制。示意 图1示出了CPU与GPU的芯片资源的示例分布。

Cuda学习1_第1张图片

 

将更多的晶体管用于数据处理,例如浮点计算,对于高度并行计算是有益的;GPU可以用计算隐藏存储器访问等待时间,而不是依赖于大数据高速缓存和复杂的流控制来避免长的存储器访问等待时间,这两者在晶体管方面都是昂贵的。

通常,应用程序混合了并行部分和顺序部分,因此系统设计为混合使用GPU和CPU,以最大限度地提高整体性能。具有高度并行性的应用程序可以利用GPU的这种大规模并行特性来实现比CPU更高的性能。

 CUDA®: A General-Purpose Parallel Computing Platform and Programming ModelCUDA®

2006年11月,NVIDIA®推出了CUDA®,这是一种通用并行计算平台和编程模型,它利用NVIDIA GPU中的并行计算引擎,以比CPU更高效的方式解决许多复杂的计算问题。

CUDA附带的软件环境允许开发人员使用C++作为高级编程语言。如图所示 图二其它语言、应用编程接口或基于指令的方法也被支持,例如FORTRAN、DirectCompute、OpenACC。

Cuda学习1_第2张图片

 A Scalable Programming Model 

多核CPU和众核GPU的出现意味着主流处理器芯片现在是并行系统。挑战在于开发应用程序软件,使其能够透明地扩展其并行性,以利用不断增加的处理器内核数量,就像3D图形应用程序能够透明地将其并行性扩展到内核数量差异很大的众核GPU一样。

CUDA并行编程模型旨在克服这一挑战,同时为熟悉C等标准编程语言的程序员保持较低的学习曲线。

它的核心是三个关键的抽象-线程组的层次结构、共享内存和屏障同步-它们作为最小的语言扩展集简单地暴露给程序员。

这些抽象提供了细粒度的数据并行性和线程并行性,嵌套在粗粒度的数据并行性和任务并行性中。它们指导程序员将问题划分为粗略的子问题,这些子问题可以由线程块独立并行地解决,而每个子问题又划分为更精细的部分,这些部分可以由块中的所有线程协作并行地解决。

这种分解通过允许线程在解决每个子问题时协作来保留语言的表达能力,同时支持自动可伸缩性。实际上,每个线程块都可以在GPU内的任何可用多处理器上以任何顺序(并发或顺序)进行调度,以便编译后的CUDA程序可以在任意数量的多处理器上执行,如所示 图3,并且只有运行时系统需要知道物理多处理器计数。

这种可扩展的编程模型允许GPU架构通过简单地扩展多处理器和内存分区的数量来覆盖广泛的市场范围: 从高性能发烧友GeForce GPU、专业Quadro和Tesla计算产品到各种廉价的主流GeForce GPU(请参见支持CUDA的GPU查看所有支持CUDA的GPU的列表)。

Cuda学习1_第3张图片

 

你可能感兴趣的:(CUDA学习,学习)