首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CPU与GPU的区别

CPU与GPU的区别

作者头像
猫叔Rex
发布2020-08-25 11:09:29
1K0
发布2020-08-25 11:09:29
举报
文章被收录于专栏:科学计算科学计算

 我们学习GPU编程,肯定都是要有CPU编程的基础,不可能连C都不会就直接学习GPU,因此,我们这一节就来讲一下CPU与GPU的不同,可以让大家更好的了解GPU编程。

  1. 硬件架构不同,以Intel的某款8核处理器为例,CPU中有很大一部分面积都被缓存占去了,相比之下,8个核心占的面积并不算大。所以CPU的主要时间并不是计算,而是在做数据的传输。

image-20200818121933943

  再来看GPU的架构,从下图可以看出,GPU中缓存只占了很小的一部分的空间,绝大多数的空间都被计算单元SMX占用,因此GPU更适合用来做运算。

image-20200818122651994

  1. CPU适合那种逻辑复杂,但运算量小的任务;而GPU适合运算量大,但逻辑简单的任务,结合我们后面章节讲的例子,也可以看出,我们在GPU编程时,有一种优化方式就是将循环展开,这样会导致代码量会有所提高,但通过这个操作,我们明确告诉GPU应该做什么处理,提高GPU的执行效率;
  2. 支持线程的方式不同,CPU的每个核只有少量的寄存器,每个寄存器都将在执行任何已分配的任务中被用到。为了能执行不同的任务,CPU将在任务与任务之间进行快速的上下文切换。从时间的角度看,CPU上下文切换的代价是非常昂贵的,因为每一次上下文切换都要将寄存器组里的数据保存到RAM中,等到重新执行这个任务时,又从RAM中恢复。相比之下,GPU同样会用到上下文切换的概念,但它拥有多个寄存器组而不是单个寄存器组。因此一次上下文切换只需要设置一个寄存器组调度者,用于将当前寄存器组里的内容换进、换出,它的速度比将数据保存到RAM中要快好几个数量级。
  3. 对失速状态的处理不同,失速状态是指当没有足够多的任务时,处理器就会闲置。如果此时有很多小任务,每一个都会在一小段时间后阻塞,那么CPU将花费大量的时间在上下文切换上,而只有少部分时间在做有用的工作,此时效率就会急剧下降。而GPU对这种失速状态的处理就很好,GPU采用的是数据并行的模式,它需要成千上万个线程,从而实现高效的工作。它利用有效的工作池来保证一直有事可做,不会出现闲置状态。当GPU遇到内存获取操作或在等待计算结果时,SM就会切换到另一个指令流,而在之后再执行之前被阻塞的指令。
  4. CPU遵循缓存一致性,而GPU不是,这一点在上一节“GPU内存深入了解”中有讲,这里不多赘述。
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-08-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 傅里叶的猫 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档