CUDA C编程及GPU基本知识【二】

1、CPU和GPU的架构

吞吐:单位时间内处理的指令条数
延迟:一条指令从发出到返回结果所需要的时间

在这里插入图片描述

2、CPUs: 延迟导向设计和GPUs: 吞吐导向设计

2.1 CPUs: 延迟导向设计

处理运算的速度远高于存储访问的速度,以空间换时间的方式,所以CPU设计了这种多级缓存的结构。

在这里插入图片描述

2.2 GPUs: 吞吐导向设计

在这里插入图片描述

2.3 GPU&CPU特点

在这里插入图片描述

2.4 GPU编程:什么样的问题适合GPU

计算密集:数值计算的比例要远大于内存操作,因此内存访问的延时可以被计算掩盖。
数据并行:大任务可以拆解为执行相同指令的小任务,因此对复杂流程控制的需求较低。

3、GPU编程与CUDA

CUDA(Compute Unified Device Architecture),由英伟达公司2007年开始推出,初衷是为GPU增加一个易用的编程接口,让开发者无需学习复杂的着色语言或者图形处理原语。

OpenCL(Open Computing Languge)是2008年发布的异构平台并行编程的开放标准,也是一个编程框架。OpenCL相比CUDA,支持的平台更多,除了GPU还支持CPU、DSP、FPGA等设备。

3.1 CUDA编程并行计算整体流程

1个CUDA程序可以分为3个步骤,第一个步骤是从主机端(CPU)申请内存,然后再把主机中内存的内容拷贝到设备端(GPU),第二个步骤是设备端的核函数进行计算,第三个步骤是把设备端内存的内容拷贝到主机,最后释放显存和内存。

在这里插入图片描述

3.2 CUDA编程术语
3.2.1 硬件

Device=GPU
Host=CPU
Kernel=GPU上运行的函数

在这里插入图片描述

3.2.2 内存模型

CUDA模型最基本的单位是线程处理器(SP)
多个线程处理器(SP)和一个shared memory(共享内存)构成一个多核处理器(SM),多个线程处理器(SP)之间是并行运行的
多个多核处理器(SM)和一个global memory(全局内存)构成一个GPU,多个多核处理器(SM)之间是并行运行的

在这里插入图片描述

3.2.3 软件

在这里插入图片描述

3.2.4 线程块:可扩展的集合体

线程:内存模型在软件侧最基本的执行单位
线程块:线程的组合体;有3个特点:1、线程块内的所有线程各自独立计算和访问存储,2、线程块内的共享内存可以被线程块内的所有线程所共享,3、用一个共有的时钟来去将线程块内的所有线程来进行一个同步和原子操作,进而保障线程块内所有线程的同步性。

如下图,一个线程块由256个线程所组成,各个线程独立计算,最后由一个时钟来将256个线程独立计算的结果进行同步

在这里插入图片描述

3.2.5 网格(grid):并行线程块组合

网格定义:线程块的组合体
网格也有3个特点:1、网格内的线程块彼此独立,互不影响,2、网格中的全局内存可以由各个线程块访问,3、可以用一个公有的时钟来同步网格内的所有线程块

在这里插入图片描述

3.2.6 线程块id&线程id:定位独立线程的门牌号

核函数是在设备端执行的函数,内存模型一个非常关键的一点是内存和显存之间的拷贝,当核函数调用每个线程的寄存器和局部内存的时候,需要确定线程在显存中的位置

blockIdx:线程块索引,
threadIdx:线程索引,
如下图,Grid 1是网格,是由2x2个线程块(Block)组成,每个线程块(Block)是由2x4x2个线程组成

在这里插入图片描述

3.2.6.1 线程id计算

如下图,Grid 1是由2x2个Block组成,所以M为2,N也为2;每个Block是由4x2x2个Thread组成,所以P为4,Q为2,S为2

threadId.x:线程x的索引,它等于线程块x维度的索引乘以线程块x维度的大小,再加上线程x维度的索引; 以此类推threadId.y

在这里插入图片描述

3.2.7 线程束(warp )

在这里插入图片描述

4、 并行计算实例:向量相加

在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《Shane Cook Cuda并行程序设计:GPU编程指南》(CUDA Programming: A Developer's Guide to Parallel Computing with GPUs)是一本深入介绍了GPU编程的指南。本书主要介绍了CUDA(Compute Unified Device Architecture)编程框架,其中包括如何使用CUDA C/C++编写高效的并行程序。书中不仅涵盖了CUDA的基础知识和编程模型,还详细介绍了CUDA的优化技术和性能分析方法。在这本书中,读者不仅可以学习到如何使用CUDA来利用GPU的并行特性,还能掌握如何将串行代码转换为高效的并行代码。 本书的内容分为基础、优化和应用三部分。在基础部分,作者详细介绍了CUDA编程的基本概念,包括线程与线程块、内存层次结构、流和事件等。在优化部分,作者讲解了如何使用CUDA优化程序性能,包括使用共享内存、纹理内存、常量内存、异步拷贝等技术。在应用部分,作者讲解了如何使用CUDA来实现各种应用程序,包括图像处理、矩阵运算、机器学习、科学计算等领域。 总之,《Shane Cook Cuda并行程序设计:GPU编程指南》是一本全面深入的GPU编程指南,无论是初学者还是有经验的开发人员都能从中获益。它不仅能够帮助你深入了解CUDA编程,还能指导你如何使用CUDA来编写高效的并行程序。如果你正在学习GPU编程,或者想要深入了解CUDA的话,《Shane Cook Cuda并行程序设计:GPU编程指南》是一本不可错过的好书。 ### 回答2: Shane Cook的《CUDA并行程序设计 GPU编程指南》是一本对于CUDA编程非常有帮助的书目。CUDA是一种由NVIDIA发明的GPU编程技术,利用GPU的并行计算能力来加速计算。这本书讲解了如何使用CUDA来进行并行程序设计,从简单的程序开始直到更加复杂的并行算法,包括深度学习和计算机视觉应用。 这本书介绍了CUDA编程的基本概念和技术,如CUDA内存模型和内存层次结构,CUDA线程、块和网格的组织方式,以及CUDA核函数的编写和调用。此外,它还介绍了CUDA运行时API和CUDA驱动程序API,这些API提供了许多方便的功能来帮助开发人员进行GPU编程。 在本书中,每个章节都通过实例来讲解CUDA编程的主题。例如,第三章介绍了如何使用CUDA实现矩阵乘法和矩阵转置,第六章讲解了如何使用CUDA进行图像处理,第九章讲解了如何用CUDA实现K-means聚类算法,第十章介绍了如何使用CUDA进行深度学习。 此外,该书还讨论了许多有用的主题,如CUDA线程同步、CUDA错误处理和调试技巧、共享内存和纹理内存的使用等。这些信息对于了解CUDA编程非常有用,特别是对于需要处理大量数据和进行CPU-GPU协同计算的应用程序。 总之,《CUDA并行程序设计 GPU编程指南》是一本非常好的CUDA编程入门书籍,它详尽地讲解了CUDA编程的理论和实践,为开发人员提供了丰富的知识和实用的技能。如果您想了解并行计算和GPU编程,这本书是一个非常好的起点。 ### 回答3: 《Shane Cook CUDA并行程序设计 GPU编程指南》是一本关于CUDA并行程序设计的教材。其中包含了CUDA的基础知识、并行算法和优化等内容,适合以CUDA为基础的GPU编程开发人员学习和参考。 本书全面阐述了CUDA编程的细节,包括GPU器件架构、CUDA内存管理、并行算法设计、性能优化和调试技巧等。其中,作者通过大量实例代码和图表的讲解,帮助读者深入理解CUDA编程的原理和技巧,快速掌握CUDA并行编程的各类问题。 此外,作者还对现有的GPU编程语言和框架进行了简洁的比较,指出CUDA在性能和编程效率方面的优势,为读者的GPU编程之路提供了有益的指导。 总之,《Shane Cook CUDA并行程序设计 GPU编程指南》是一本实用的CUDA编程手册,值得广大GPU编程开发人员参考借鉴。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值