• 活的潇洒
    2019-05-01
    通读三遍全文,花了3个多小时做了笔记链接如下:
    https://www.cnblogs.com/luoahong/p/10800379.html

    作者回复: 👍感谢分享给大家

     2
     26
  • 大熊
    2019-05-07
    重新学习后,我又来了……
    1. 加大概率事件:
       缓存机制,提高平均概率下的性能;
       运行时编译热点代码的机制;
       Spring框架使用的单例模式(个人还不确定);

    2. 通过流水线提高性能:
       工作中可以尝试把一个大规模的SQL分成几个规模适当的小SQL进行执行;
       并发编程;

    3. 通过预测提高性能:
       以前有的软件安装的时候,有一秒就安装好的感觉,之前我就在想,是不是我选择完安装路径之后,就已经开始有预安装的操作了;
       使用chrome在打开几个tab页的情况下,直接关闭浏览器,再次打开浏览器之前强制关闭的tab页直接默认打开的操作(不知道是否属于预测,预测我还是需要这几个页面);
       在自己练习的博客中,多张图片在上传的时候,先让图片及时上传并处于“预删除”状态,待点击提交之后,才让现有的图片变成保存的状态。
       热点数据、常用的固定数据,可以先保存在redis等缓存中,等到需要的时候先从缓存中获得,如果获取失败再去查询数据库
    展开

    作者回复: 👍你学得非常认真努力,给大家做了一个好榜样。

    
     25
  • pyhhou
    2019-05-01
    对于思考题:
            * 加速大概率事件
              通常我们使用 big-O 去表示一个算法的好坏,我们优化一个算法也是基于 big-O,但是 big-O 其实是一个近似值,就好比一个算法时间复杂度是 O(n^2) + O(n),这里的 O(n^2) 是占大比重的,特别是当 n 很大的时候,通常我们会忽略掉 O(n),着手优化 O(n^2) 的部分

            * 通过流水线提高性能
            能够想到的是任务分解,把一个大的任务分解成好多个小任务,一般来说,分的越细,小任务就会越简单,整个框架、思路也会变得更加清晰

            * 通过预测提高性能
            常常在计算近似值的时候,例如计算圆周率,我们可以根据条件预设立一个精确率,高过这个精确率就会停止计算,防止无穷无尽的一直计算下去;另外就是深度优先搜索算法里面的 “剪枝策略”,防止没有必要的分支搜索,这会大幅度提升算法效率
    展开

    作者回复: 👍算法的例子举得很好,剪枝策略的例子也很好。

    不过流水线和圆周率的例子不太好,可以再想想。

     2
     25
  • 须臾即
    2019-05-01
    有两个问题没想明白:
    1.增加晶体管怎么提高运算速度?
    提高主频好理解,计算的频繁一些,增加晶体管是干了什么,增加计算单元么,或者说是增加流水线控制单元。
    2.cpu的电压是受了什么因素限制的?
    既然电压低功耗低,那么各厂商应该都想把电压做的越低越好,现实是不容易办到,是哪些因素限制的?

    作者回复: 须臾即他9同学你好
    增加晶体管可以增加硬件能够支持的指令数量,增加数字通路的位数,以及利用好电路天然的并行性,从硬件层面更快地实现特定的指令,所以增加晶体管也是常见的提升cpu性能的一种手段。
    电压的问题在于两个,一个是电压太低就会导致电路无法联通,因为不管用什么作为电路材料,都是有电阻的,所以没有办法无限制降低电压,另外一个是对于工艺的要求也变高了,成本也更贵啊。

    
     23
  • Seventy、
    2019-05-11
    老师您好,有个疑问,上节课我们讲过“程序运行CPU执行时间 = 指令数 * CPI * 时钟周期时间(Clock Cycle Time)”,而这节中提到增加晶体管数量会提升CPU性能,请问"晶体管数量"与上面的公式有什么关系呢? 还是说晶体管数量会影响上面公式的三个部分中的哪一部分?? 盼老师答复。

    作者回复: 增加晶体管数量,其实是通过提供更复杂的电路支持更多的“指令”。也就会减少运行同样程序需要的指令数。
    打个比方,比如我们最简单的电路可以只有加法功能,没有乘法功能。乘法都变成很多个加法指令,那么实现一个乘法需要的指令数就比较多。但是如果我们增加晶体管在电路层面就实现了这个,那么需要的指令数就变少了,执行时间也可以缩短。

     2
     12
  • 莫问流年
    2019-05-20
    1.加速大概率事件
    各种缓存(内存缓存、CDN缓存)
    2.流水线
    并发编程、异步编程
    音视频播放器边播放边缓冲
    3.预测
    小说的下一页预加载
    电商大促的CDN预热
    展开

    作者回复: 几个例子举得都很好!而且和实践应用结合得也很好!

    
     9
  • Sunny
    2019-08-20
    为什么增加晶体管会使计算加快?

    作者回复: Sunny同学,

    你好,增加晶体管通常可以做到以下这些

    1. 设计了一个更复杂的电路,让原先软件执行的事情,直接通过硬件电路解决了。也就是在CPU里增加了新指令,自然同样的程序就运行得更快了。

    2. 同样功能的电路更多了,比如有了更多更大的寄存器,更多的可以并行的流水线,这样同样的指令可以同时运行不受限于有限的资源,也可以让程序算得更快。

    
     5
  • JiangPQ
    2019-05-11
    关于这一课的组织结构上一点建议:

    1. 在电路设计上,并行和流水线通常是相互配合同时存在的,但是老师在讲述时将这两点分离了,我个人感觉会让不懂电路设计的读者会产生困惑。

    2. 切流水线的意思是在电路的关键路径中的特定位置处插入寄存器,用空间换时间,使得切分后的关键路径的每一段具有更短的执行时间,但在总体上看单条指令的总体运行时间并不会减少。在切流水线后,电路可以使用更高的时钟频率,所以其主要目的还是在于提高主频。在文中“也是现代 CPU 在主频没有办法提升那么多的情况下,性能仍然可以得到提升的重要原因之一”的表达似乎不是那么精确。

    我的理解可能也有不准确的地方,还麻烦老师指正。

    前两天搞毕设,天天就是并行流水的捣腾,做硬件真的使人头秃...
    展开
     1
     4
  • arvin
    2019-05-11
    老师您好,两个问题没能理解。1:程序如何自动执行的。2,二进制概念的0和1计算机又是如何对应到高电压低电压的。

    作者回复: arvin你好,第一个问题我们会在讲解cpu的第一部分详细讲解。核心是一个时钟信号和一个自动计数器。
    第二个问题我们在后面讲电路的时候会介绍,可以认为就是电路的开闭。

    
     4
  • 古夜
    2019-05-06
    打孔编程那里说得太简略了,而且,看题目的意思似乎是要从打孔编程讲起,然后一步步来说计算机怎么理解打孔,如何编译,如何运行的吧,感觉文章里写反了,是不是五一有点仓促了

    作者回复: 古夜同学你好,谢谢反馈。对于计算机如何编译运行,是一个挺复杂的话题了,恐怕一讲之内讲不清楚。这一讲的主要目标,还是让大家明白指令和机器码是怎么回事儿。

    关于计算机如何阅读指令运行的整理流程,会在17讲讲解CPU部分的时候做深入的剖析。

    
     4
  • DreamItPossible
    2019-06-27
    手机跑分能作弊吗?怎么做?

    首先,要明确手机跑分的标准,即测量的是整体性能,比如响应时间,还是单项指标性能,比如文中提到的CPU时间,或者吞吐率等
    其次,手机跑分能作弊,以手机跑分测量的是程序运行的CPU时间为例,应用本文的原理:程序的CPU时间等于指令数乘以CPI乘以CPU周期,逐个来分析;

    由于手机跑分是用预设好的程序来运行,那么方法一:使用针对这些预设程序专门优化的编译器和汇编器,可以减少指令数;方法二:使用流水线、预测等技术,可以减小CPI;方法三:使用超频,可以在跑分时提高主频,减小CPU周期等

    作弊后的手机跑分还有参考意义吗?
    如果作弊的手机跑分是针对单项指标的话,而且你又关注的该单项指标,则有意义;
    如果你关注的是整体性能,那么参考意义不大;
    注意,要有局部视角和系统观。
    展开
    
     3
  • KR®
    2019-05-02
    对于我这种小白来说,能啃完这些知识点要感谢初中物理老师为我打下的物理基础 哈哈,

    徐老师的讲解也太清晰了吧!!!
    能看懂跟得上节奏的感觉真好~

    还要感谢高阶的同学们,我没有开发经验,看文章时遇到一些专业名词会一脸懵, 好在高阶的同学会在答疑区提问互动, 看你们的提问和回答我都会有收获!
    展开

    作者回复: 👍谢谢支持,要坚持和大家多交流

    
     3
  • 不记年
    2019-05-10
    作者大大,关于协程是流水线的问题其实我是这样想的,流水线的目的就是减少cpu空闲的电路, 尽量让cpu每一部分都工作起来。而协程的也是减少cpu空闲的时间,更好的利用cpu,感觉两者有异曲同工之妙就写下来啦

    作者回复: 赞思路,不过我觉得还是不太一样的。它更像“抢跑”而不像防止浪费和空闲。

    
     2
  • 静静的拼搏
    2019-05-08
    加速大概率事件:在程序中遇到的是使用缓存,减少热点数据的查询时间
    流水线:java程序juc包提供的LongAdder工具类采用了这种思路,提高运算效率
    预测:目前还没有遇到过

    作者回复: 静静的拼搏同学你好,关于LongAdder可以更具体地和大家分享一下吗?

    
     2
  • 不记年
    2019-05-07
    加速大概率事件 优化工程中使用次数最多的算法
    流水线 协程
    预测 剪枝

    作者回复: 👍 关于协程是流水线能具体解释一下么?我没有太明白。

    
     2
  • Only now
    2019-05-05
    概率:
     JIT 运行时编译, 可以通过profiling数据, 将小概率甚至死代码排除, 只运行有效部分。

    流水线:
     这个不就是缓存系统典型的消费者生产者模型么? 日志系统表现的最明显, 生产者将日志塞入日志缓存, 日志线程则负责从日志缓存里取出数据记录到磁盘, sync进程则负责将关键日志推送到集中存储。

    预测:
      缓存热点数据, 因为大部分的访问都是访问热点数据, 所以, 我可以预测下一次访存大概率就是在热点缓存里, 先去热点缓存中查找数据, 若不存在,再去落地库进行索引
     
    展开

    作者回复: 👍概率和预测说得很好

    不过CPU的流水线还是比较特殊的,和我们一般理解的流水线的方式其实还是有些差异,可以在后面特别深入关注一下流水线的部分。

    
     2
  • 知非
    2019-05-05
    加速大概率事件:
      - 缓存
    流水线:
      - 开发过程中功能分解
    预测:
      - 剪纸
      - 浏览器预加载
    展开

    作者回复: 👍说得不错,不过“剪纸”是什么能具体说说么?

    
     2
  • 庄小P
    2019-05-03
    老师你说低压的通常主频只有标压的2/3,那是为什么要这样呢?按理说,低压时候功耗更低了。同等功耗下,低压的主频不应该高于标压的主频嘛?

    另外一个问题是,上面的计算向量的点积时候,我能不能通过多加两个CPU来计算求和,然后最后再进行汇总,这样是不是还能提高性能呢??

    作者回复: 庄小P同学你好,

    低压和低主频都是为了减少能耗。比如Surface Go的电池很小,机器的尺寸也很小。如果用上高主频,性能更好了,但是耗电并没有下来。

    另外,低电压对于CPU的工艺有更高的要求,因为太低的电压可能导致电路都不能导通,要高主频一样对工艺有更高的要求。所以一般低压CPU都是通过和低主频配合,用在对于移动性和续航要求比较高的机器上。

    向量计算是可以通过让加法也并行来优化的,不过真实的CPU里面其实是通过SIMD指令来优化向量计算的,我在后面也会讲到SIMD指令。

    
     2
  • 沃野阡陌
    2019-05-02
    老师,什么是缓存?需要用程序去操作吗?和内存又有什么关系?

    作者回复: 沃野阡陌同学你好,答案取决于你这里指的缓存是什么。抽象的缓存,比如我们可以用redis或者memcqched作为访问数据库的缓存。具象的有时候一般我们指cpu里内置的高速缓存,也就是l1到l3 cache。前者一般都是应用程序来操作,后者不需要程序来操作。
    后者内置在cpu里,比内存还要快上10到100倍。在讲解存储器的部分我们会重点讲解高速缓存以及怎么利用高速缓存的性能来写程序。

    
     2
  • Juexe
    2019-05-02
    1. 加速大概率事件
    可能如 Redis 缓存、CDN 内容分发网络、游戏开发中常用的对象池等

    2. 通过流水线提高性能
    可能如多线程开发、分布式系统、DDOS攻击等

    3.通过预测提高性能
    浏览器的一个功能:下一页自动预加载;
    Web 开发中用到的一个 InstantClick.js 能够预加载 hover 的链接。

    不过「加速大概率事件」和「通过预测提高性能」好像有些重合,分得不是很清楚?
    展开

    作者回复: 👍加速大概率事件,通常指在我们确定了概率的情况下做出性能优化。而预测很多时候并不要求是大概率事件,只要平均情况下比不预测要明显好就够了。

    
     2
我们在线,来聊聊吧