前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Assemble|并行计算|SuperScalar

Assemble|并行计算|SuperScalar

作者头像
朝闻君
发布2021-11-22 11:24:02
6040
发布2021-11-22 11:24:02
举报

A super scalar processor is a CPU that implements a form of parallelism called instruction-level parallelism within a single processor.

超标量(superscalar)架构是指在一颗处理器内核中实行了指令级并行的一类并行运算。这种技术能够在相同的CPU主频下实现更高的CPU吞吐率(throughput)。

我们暂时先不管这种技术如何实现,总而言之,他能够在单核CPU中依靠不同执行单元同时执行一系列没有依赖关系的指令。

了解这种技术有助于在代码中触发这种优化。

前置:

本文附图类似于甘特图,横向可以并行计算,纵向则必须顺序执行,高度代表执行时间,每个重复单元代表一次迭代。

Naive Mode

以下是一段标准的累乘操作,每一次*=都需要上一次乘法的结果作为operand,因此构成了数据依赖。

由于Super Scalar的存在,i++这个add指令和[i]这个load指令和mul指令不存在依赖关系,可以并行,此时执行总时间近似为每次循环执行1次乘法。

Iteration Unrolling

这次我们迭代的步长增加,add的次数减少了一半,load次数不变。然而,由于在循环体内,两次乘法仍然存在依赖关系,无法并行,最终我们的执行时间不变。(减少的部分是跳转、自增,但是乘法时间较长因此最终时间没有减少,如果换成整数加法就会有一定减少)

Divide and Conquer

这次我们使用分治,由不同变量处理不同部分的累乘,最终将结果相乘。由于不同变量的累乘彼此独立,因此SuperScalar被触发,两个乘法可以并行计算。最终,通过扩大一倍步长,我们节约了一半的执行时间。随着步长递增,执行时间也会减少。

Hint:

由于计算资源有限,并行计算过多时,寄存器可能无法存下操作数,存入内存,导致减缓;此外,本身执行单元的数目有限。

Associative

我们这次把和结果相乘的operand先相乘,然后和结果相乘,由于前者并不涉及res,因此彼此之间无依赖关系,可以并行计算。而后者必须顺序执行。最终,通过扩大一倍步长,我们节约了一半的执行时间。随着步长递增,执行时间也会减少。

与上面方法的效果类似,但是显然实现更加简单。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Naive Mode
  • Iteration Unrolling
  • Divide and Conquer
  • Associative
相关产品与服务
GPU 云服务器
GPU 云服务器(Cloud GPU Service,GPU)是提供 GPU 算力的弹性计算服务,具有超强的并行计算能力,作为 IaaS 层的尖兵利器,服务于深度学习训练、科学计算、图形图像处理、视频编解码等场景。腾讯云随时提供触手可得的算力,有效缓解您的计算压力,提升业务效率与竞争力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档