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

计算单元:具有将接收到的任意输入转换成输出的能力以及改变当前处理状态的能力。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. 华为atn980传输设备_注册开发者超200万!华为HMS加速全球布局,打造全场景智慧体验...
  2. (私人收藏)2019科协WER解决方案
  3. volley 调用php接口,使用Volley发送帖子请求并使用PHP接收
  4. 数学建模国赛 常考赛题类型(模拟退火算法、粒子群算法、遗传算法)
  5. vs2017c#开源项目_2017年值得关注的开源项目
  6. 监听关闭页面事件 ajax,Vue 实现监听窗口关闭事件,并在窗口关闭前发送请求
  7. 【阅读笔记】:End-to-end Structure-Aware Convolutional Networks for Knowledge Base Completion
  8. [转载] python 如何判断中文的字符串长度
  9. 关于Java书籍的最佳阅读顺序
  10. 员工管理能力怎么提高?不妨使用现代工时表软件
  11. 使用eclipse编写第一个Java程序及运行(超详细)
  12. php 最常用的内置函数大全
  13. 牛排生熟程度 英语说法
  14. Steaming SQL for Apache Kafka 学习
  15. Matlab GUI编程技巧(十二):menu创建菜单或菜单项
  16. 不敢相信!那些真实存在的机器人女友们!
  17. 在学习thymeleaf中,给function 方法传Controller传递过来的参数,报错:Uncaught SyntaxError: missing ) after argument list
  18. (转)深入详细理解矩阵 (矩阵的加减乘、转置、共轭、共轭转置)
  19. 「杂谈」程序猿必备的1700个英语单词
  20. php cms带专题,phpcms标签模板及专题模板的制作

热门文章

  1. 【Java】PAT乙级真题全记录(三)41到60题
  2. Windows 下有哪些能极大地提高工作效率的软件?
  3. Python中小数数字
  4. kudu简介与操作方式
  5. 【CSRMesh2.1蓝牙开发】-Android demo介绍【二】之代码分析
  6. 为什么我的浏览器经常崩溃? 第一讲
  7. 开源公告|分布式深度学习训练工具PatrickStar正式开源
  8. 反应迟钝的 Resin
  9. 项目上线出bug怎么处理
  10. Python 批量鉴别审核黄图