18-645:How to Write Fast Code 期中考试准备

这篇博客总结了18-645课程中关于快速代码编写的背景知识,包括multicore和manycore编程。作者强调了代码加速在RMS(识别、挖掘、合成)中的应用,并讨论了硬件平台如multicore和manycore的区别,以及ILP、SIMD、SMT等技术。文章还涵盖了并发与并行的概念,多线程编程中的关键概念如SIMD-level、SMT、core-level,并详细介绍了并行优化技术,如循环展开、分支消除和roofline模型。最后,文章对比了multicore和manycore编程的特点及应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

18-645:how to write fast code快要期中考试了,所以这里对过去所学的三个Module进行一个总结,分别是background、multicore programming、manycore programming。接下来对每个Module都进行总结一下。

转载请注明出处:http://blog.youkuaiyun.com/c602273091/article/details/63279988

Background

首先,我们要知道怎么才能实现fast code,使代码执行的速度非常快。需要实现高效快速的代码,需要快速的平台和好的技巧。快速的代码执行平台包括了多核处理器平台、多处理器平台、云平台。好的技巧包括了数据结构、算法、软件架构(后面会谈到算法模式和架构模式)。

为了实现这个目标,我们需要进行做到以下几点:

  • 求解的过程我们应该感觉开心,而不是痛苦;
  • 在现存的软件中找到需要的模块
  • 找到能实现目标的最好的平台,平台的选择不是越快越好,其实还要考虑功耗、成本等等因素
  • 为什么某些部分的代码执行很慢
  • 找到整个架构中存在的瓶颈

在目前,我们需要进行代码加速的用途主要是RMS,recognition、mining、synthesis。

识别让我们知道世界是什么样的,数据挖掘可以让我们看到世界的内在,分析估计可以对这个世界进行预测,我们将可以参与到其中。

在这里需要注意的一个东西就是Norman’s Gulf,就是计算机系统的内在性能进行感知的时候,需要和人的感知系统进行一个相互沟通,促进,这样才更够对计算机的内在状态进行了解。

Wiki解释:https://en.wikipedia.org/wiki/Gulf_of_evaluation

目前举几个我们需要加速的应用:语音识别、图片识别、医学图像、金融工程。

接下来我们对代码加速的硬件平台做一个初步的了解。硬件平台有指令集(RISC、CISC)、设计哲学(multicore、manycore)、功耗等等比较容易区分得指标。

Multicore VS Many core
multicore就是多核处理器,代表的就是intel那一套东西,然后manycore的就是多处理器,是显卡,nVdia那一套东西。

它们的区别在于multicore像几头牛一样,数量不多,但是每个都很生猛,所以multicore的优化就是让每头牛更壮更强,就是对每个线程进行优化。然后manycore就像一群鸡一样,数量很多,但是每一只单独拎出来还是比较弱的。所以multicore对很复杂的任务有进行专门的优化,而manycore的话指令更简单,数据路径没有multicore复杂。manycore更多的是通过aggregate throughput在增强性能。

但是两者都有相同点,就是它们目前优化的方向都是都是增加vector unit的宽度、增加每个die上面的核数、增加off-chip的带宽。就是从存储、指令、调度上面进行增强。

ILP
在指令集并行方面,multicore做了很多工作。比如ILP,指令集并行,就是让一系列指令可以同时计算。

一般指令执行的顺序有in-order和out-of-order。但是一般来说,使用out-of-order的话,使得指令可以使用更多的ILP。在muilticore那里,有register renaming和reorder。ILP的缺点就是在处理器方面需要进行大量的改进,而且而且功耗更多了,设计处理器的时候需要更多的时间。优点就是没有改变代码的线性结构。

SIMD:就死single instruction multi data。 就是比如执行加法,之前只能是32位+32位,现在如果一次性可执行加法可以实行256位+256位,那么就可以使得8条加法指令浓缩成了一条指令。优点就是area和功耗节约了,提高了吞吐量。缺点就是更难操作了,需要程序员进行优化。编译器需要重新编译。

SMT
SMT也就四simutaneous multithreading。就是多个线程同时执行。

优点就是功耗利用率提高,提高了处理器的使用率。缺点就是如果发生数据冲突,需要进行同步。

memory hierarchy
主要是对cache进行操作的时候,需要考虑数据的局部性(locality)时间和空间的局部性。

考虑了这些问题,就可以减少cache miss。cache miss有compulsory miss(初次索引)、conflict miss(冲突缺失)、capacity miss(容量缺失)

如果考虑cache miss的问题,减少了miss,那么就可以更快获取数据进行计算、cache就是管理好的存储、终端用户对此感觉透明,更好地进行函数接口封装。

缺点就是可能会对cache区域进行数据竞争,需要进行同步处理。

当然除了快速代码的硬件平台,还有操作系统、应用框架(API)、应用的组成模块。

接下来介绍一下并发(concurrency)与并行(parallelism)。

并发更多指的是应用里面,有可以进行同时进行的部分;然后并行指的是平台的功能,平台支持同时执行多个任务。

在进行解决这一类问题的时候,我们要记住:

  • 理解问题的当前状态(平台、资源、问题的状态)
  • 对问题进行内在的观察(找到可以并
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值