机组学习笔记之——性能与功耗分析

    技术2022-07-10  162

    先上一张计算机组成原理的总结图。

    思维导图连接

    概述

    作为一名开发狗,经常拷问自己的灵魂三问?

    这个程序有哪里可以优化的吗?这次访问的时间有点长呐这次查询的速度有点慢呀

    我们经常说的这些“优化”,执行时间长,查询速度慢都是和计算机性能相关的名词,如何用量化的指标进行表述出来,以及提升性能从哪些方面入手呢?希望通过我的学习和思考给你一些启发;

    性能指标

    响应时间 直观来说是由客户端发送请求,到结果返回所消耗的时间。即程序的执行时间,降低响应时间意味着计算机运算的更快。

    吞吐率 吞吐率是指一定时间范围内所能处理的事情(计算机处理的数据和指令)。缩短程序的响应时间,让程序执行的更快,一般情况下能够提升吞吐率。

    影响性能的因素

    我们可以通过一个简单的公式来表示性能; 性能 = 1 时 间 \frac{1}{时间} 1,这里我们单纯使用时间还会存在两个问题,我们看下面这个指令结果:

    1 时间会不准,程序运行的时间=user用户态时间+sys内核态时间+程序切换的时间2 不同的硬件,主频会影响指令周期。即使相同的电脑也会存在降频的因素 $ time seq 1000000 | wc -l 1000000 real 0m0.101s user 0m0.031s sys 0m0.016s

    我们总结出:程序CPU的执行时间=指令数* CPI * 时钟周期时间,我们在考虑优化的时候应该从这个三个方向进行出发;

    指令数:代码由编译器转换为指令,针对不同的硬件会有不同的表达方式每条指令的平均时钟周期 Cycle Per instruction CPI:通过“流水线”,“冒险预测”等方式尽可能的降低CPU Cycle时钟周期时间:不断的提升电脑主频,降低时钟周期时间

    功耗:性能提升的拦路虎

    我们上面讲到提升的性能的三个点,我们这里重点说下“时钟周期时间”(因为只有这块学习的深入些【笑哭】)。简单来说就是如何能让我们的CPU能够算的更快些,一方面我们想CPU中加入更多的晶体管,增加密度,另一方面是晶体管的打开和关闭能够更快一些,也就是提升主频。这两者都会面临的问题是耗电和散热。 直观来看,如果相同大小的CPU中堆积了更多的晶体管,晶体管散发的热量就会很大。通常我们会采取“风扇”,“水冷”等操作来降温。据说腾讯的服务器是放在山洞中,微软的是放在深海…

    热量公式 功耗 ≈ \thickapprox 1 2 \frac{1}{2} 21 ×负载电容× 电 压 2 电压^2 2×开关频率×晶体管数量

    我们单纯从“算的更快”这个角度已经有很大限制,转换思路我们从“搬的更多”来提升性能。增加计算机的核数,使程序并行计算已经成为当前比较流行的做法。如大数据分布式计算,AI中的矩阵计算;

    综合以上的学习,对于性能的优化,我们学习了“摩尔定律”,“并行计算”之外,对于计算机组成原理的三大原则,进行添加解读:

    1、加速大概率事件,例如“缓存”,“局部性原理”。将热点数据以及邻近数据加载到内存当中。还有人工智能中的“GPU”,针对大量的矩阵运算进行加速。再说到JVM编译过程中的“热点编译”。总结一句话:非均匀分布的时间处理,都可以采用该策略,都会有优化空间2、流水线处理,由于CPU计算资源与存储资源的性能存在很大差异,流水线处理能够更有效的利用计算机资源。3、预测与冒险,对我们的程序执行做出提前的预判,提高程序的性能。如在做数组循环时,直观的预测访问当前元素时会访问下一个元素。

    参考文献: 极客时间:深入浅出计算机组成原理 计算机组成与设计[硬件与软件接口] 1.6与1.7 创作不易,喜欢的话记得收藏哦!持续更新…

    Processed: 0.012, SQL: 9