
文章插图
这张图看起来更直观一些 , 可以看到主存和 L1 差不多有50倍的性能差异 。如果要访问的数据在 L1 里 , 那就比从主存里直接取要快50倍 , 如果已经在 L3 里了 , 那也比主存取大概要快5-6倍 。换句话说 , 如果你的程序大部分数据能够在 L3 缓存里存得下的话 , 比每次都要从主存里去取 , 这个性能能够提高6倍左右 。

文章插图
存储访问的基本原则就是局域性 , 连续、不跳跃的存储访问最快 。这个包含代码 , 也包含数据 。从代码的角度来讲也就意味着顺序执行 , 没有任何跳转 , 没有任何条件 , 这样的程序是最快的;从数据的角度来讲 , 连续存放的数据是最快的 。如果你访问数据的时候不需要在内存里跳来跳去 , 这样就会比较快 。当然内存本身实际上是没有这个特性的 , 但考虑到缓存机制 , 就会有这个问题 , 硬盘更是如此 。硬盘即使不考虑缓存 , 都是连续访问 , 会比跳跃式的方面要快 。
2. 硬件——处理器的乱序执行和流水线

文章插图
处理器里也有所谓的乱序执行和流水线 , 这两个特性主要都是为了提高在单位时钟周期的处理能力 。后面放的一张图就会看到为什么我们有很大的需求需要提高单位时钟周期的处理能力 , 它对我们程序的影响是程序一旦有分支就会打乱流水线 , 性能下降 , 也就是说程序里分支越少越好 , 条件语句越少越好 , 甚至调函数也是越少越好 。

文章插图
这张图表现摩尔定律的局限性 , 主要是说明想要利用摩尔定律带来的性能提升的话 , 我们已经不能利用主频的提高了 , 哪怕是单位时钟周期的执行的指令数提高也是非常受限的 , 所以我们需要主动去利用多核的并发并行方面的特性 , 这个是很难的 。
3. 硬件——并发对编程思维带来冲击:
- 不再能假设有自然的完全执行顺序
- 开发人员也必须主动利用多核特性
- 多线程的调度和竞争成为影响性能的关键因素
- 适用于单线程的接口可能不再适用
4. 软件——系统调用开销:

文章插图
除了极少数非常硬核的嵌入式开发可能会完全不需要调用操作系统 , 一般情况下我们总是需要调用操作系统的接口 , 在这种情况下就需要考虑操作系统调用本身的开销 。图中列了几个系统调用 , 大家知道它们哪个快哪个慢吗?需要经过测试才能知道哪些比较快 。我只知道其中 gettimeofday 是比较快的 , 在比较新的 Linux 上会是如此 , 因为 Linux 对 gettimeofday 有个特殊的优化 , 能够在系统调用时不进行用户态和核心态的切换 。而大部分系统调用都要执行用户态和核心态之间的切换 , 就会有一个额外的开销 , 性能会低很多 。
5. 软件——编译器优化:
- 美甲培训学校如何
- 服装设计培训 服装设计师培训学校
- 学会计 会计培训学校机构
- 英语口语培训 口语培训课程
- 影视摄影师培训学校
- 职业培训 深圳职业培训学校
- 装饰培训机构 装饰设计培训哪里好
- sigill sigikid
- 广州美容学校推荐 广州美甲培训学校地址
- 西安计算机培训机构哪个最好 西安计算机培训学校有哪些
特别声明:本站内容均来自网友提供或互联网,仅供参考,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
