计算机底层组件分为三大基本部分:计算单元、存储单元以及两者之间的连接。

计算单元:具有将接收到的任意输入转换成输出的能力以及改变当前处理状态的能力。CPU是最常见的计算单元。它的主要属性是其每个周期能进行的操作数量以及每秒能完成多少个周期。第一个属性通过每周期完成的指令数(IPC)来衡量。第二个属性通过其时钟速度来衡量。时钟速度的提高,可以使得每秒进行更多的计算,提高该计算单元所有程序的运行速度。IPC的提高则在矢量计算能力上有相当程度的影响。矢量计算指的是一次提供多个数据给一个CPU并能同时被操作。这种类型的CPU指令被称为SIMD(单指令多数据)。

由于时钟速度和IPC提升陷入停滞,开始依靠超线程技术,乱序执行和多核架构来提高速度。超线程技术为主机的操作系统(OS)虚拟了第二个CPU,硬件逻辑则试图将两个指令线程交错地插入单个CPU的执行单元。乱序执行允许编译器检测出一个线性程序中某部分可以不依赖于之前的工作,也就是说两个工作能够以各种顺序执行或同时执行。使得当一些指令被阻塞(比如等待一次内存访问),另一些指令得以执行。多核架构指的是给CPU增加更多的核心。但是不一定多核就会更快,阿姆达尔定律认为:如果一个可以运行在多核上的程序有某些执行路径必须运行在单核上,那么这些路径就会成为瓶颈导致最终速度无法加快。

对于python来说,python的全局解释器锁(GIL),确保Python进程一次只能执行一条指令,无论当前有多少个核心。使得无法使用多核,但是我们可以使用标准库的multiprocessing,或numexpr、Cython技术,或分布式计算模型来避免。

存储单元,用于保存比特。比如主板上的寄存器、RAM以及硬盘。所有这些不同类型的存储单元主要区别在于读写数据的速度。且速度与读写方式有关,如顺序读取要比随机读取快得多。此外还有延时来表示设备查找数据所花费的时间。

比如说判断一个数是否为质数,首先将number的值保存在RAM中。为了计算sqrt_number和number_float,将该值传入CPU中,理想情况下只需要传一次,它将被保存在CPU的L1/L2缓存中,然后CPU进行两次计算并将结果传回RAM保存。在循环部分,我们更希望一次就将number——float和多个i的值传入CPU进行检查。

Python虚拟机抽象层的影响之一就是矢量操作变得不是直接可用。而numpy这样的外部库可以通过增加矢量化数学操作来帮助我们解决这个问题。

Python抽象还影响了任何需要为下一次计算保存L1/L2缓存中相关数据的优化。首先是python对象不再是内存中最优化的布局。这是因为python是一种垃圾收集语言----内存会被自动分配并在需要时释放。这会导致内存碎片并影响CPU缓存的传输。

Python的优势在于可以轻易调用其他系统,正确运用库可以使python代码在速度上和c媲美。

python高性能编程第一章读书笔记相关推荐

  1. 《Go语言圣经》第一章 - 读书笔记

    <Go语言圣经>第一章 - 读书笔记 第一章 Go语言入门 01 Hello World 02 命令行参数 练习 练习1.1 练习1.2: 练习1.3: 03 查找重复的行 例子运行 du ...

  2. python基础读后感_《python基础教程 》第一章 读书笔记

    python是一个简单强大的直译语言,它同样提供交互式编译环境,学起来还算有趣,在学习的过程中,同样体会了动态语言的直接与强大. 第一章 基础知识 一 运行python 在ubuntu终端输入 pyt ...

  3. 第三章 地势坤,君子以厚德载物 ——《箴言》第一章读书笔记之三

    梁先生在说完"入门最基本的方法就是从C语言入手"时,意犹未尽地又再次给我们描绘了神奇的"高手的境界": "事实上,到达高手的境界以后,不管什么语言不语 ...

  4. Python通用编程 - 第一章:用户交互

    本文是Python通用编程系列教程,已全部更新完成,实现的目标是从零基础开始到精通Python编程语言.本教程不是对Python的内容进行泛泛而谈,而是精细化,深入化的讲解,共5个阶段,25章内容.所 ...

  5. 《自控力》 【美】凯利·麦格尼格尔 第一章读书笔记

    题记:在CSDN潜水已经快两年了,看了很多给力的博客,学到了很多收获了很多,当时就觉得写博客是件好事,即帮到了别人也成长了自己,所以也有写点博客的想法.可快两年过去了,自己的博客除了草啥都没有,一直都 ...

  6. Python计算机视觉编程 第一章 基本的图像操作和处理

    第一章 基本的图像操作和处理 1.1 PIL:Python图像处理类库 1.1.1转换图像格式 1.1.2创建缩略图 1.1.3复制和粘贴图像区域 1.1.4调整尺寸和旋转 1.2Matplotlib ...

  7. 《从Paxos到Zookeeper:分布式一致性原理与实践》第一章读书笔记

    第一章主要介绍了计算机系统从集中式向分布式系统演变过程中面临的挑战,并简要介绍了ACID.CAP和BASE等经典分布式理论,主要包含以下内容: 集中式的特点 分布式的特点 分布式环境的各种问题 ACI ...

  8. Computer Systems A Programmer's Perspective(深入理解计算机系统)第一章读书笔记

    第一章    计算机系统漫游 1.1信息就是位+上下文 源程序实际上就是一个由0和1组成的位(又称比特位)序列,这些位被组织成8个一组,称为字节.每个字节都表示程序中某个文本字符. 系统中的所有信息都 ...

  9. Unix网络编程卷1 第一章读书笔记以及习题

    1 下载源码并且配置环境 对于想学习网络编程的同学来说,<UNIX网络编程>这书肯定是不二选择.所谓实践是检验真理的唯一标志,特别是对于编程来讲,再多的理论经验也比不过code一次.< ...

最新文章

  1. 2017海克斯康拉斯维加斯美国大会 精彩即将开始
  2. svn 部署问题总结
  3. win10 搭载文件服务器,win10远程文件服务器
  4. Flask的forms类
  5. oracle tns 代理配置_oracle数据库tns配置方法详解
  6. 求瑞年的java程序,java 计算瑞年的方法
  7. 头条搜索已经全面上线,会不会成为下一个流量风口
  8. EL与JSTL表达式代码示例
  9. badusb代码_badusb攻击代码
  10. rspec Could not find table
  11. C++类对象创建过程揭密
  12. 硬件电路设计之电平转换芯片SN74LVC4245A
  13. 常见物联网通信技术概览(全集)
  14. floppy计算机专业术语,计算机专业术语解释
  15. C#中check和uncheck
  16. 004--python--华氏温度和摄氏温度的转换
  17. python 实现多元线性回归
  18. 外媒称百度AI领跑全球,一场“战疫”告诉你为什么
  19. 计算机mac地址和另一台一样,电脑mac地址有多个怎么办
  20. Android通过wifi输出声音,SoundWire – 将手机变成电脑的音箱,通过 WiFi播放电脑内的声音...

热门文章

  1. 苹果机内存满开不了机怎么办?三种办法解决这个问题。
  2. 最新响应式自适应手机版日化食品零食类网站源码HTML5零食连锁加盟店网站织梦模板
  3. 紫禁繁花服务器维护,各种坑的坑。
  4. 根据关键词取商品列表
  5. 提升IE或WoW的安装或更新速度
  6. 青瓷qici - H5小游戏 抽奖机 2 界面布局
  7. 如何用Octave工具包
  8. 河大计算机学院足球队,第二十八届“河大杯”足球赛圆满落幕
  9. 【转】:Oracle Linux6.9下安装Oracle 11.2.0.4.0及psu补丁升级
  10. Java课程设计(2020版)