布尔代数:是现代电子计算机的数学和逻辑基础
----------
布尔代数与开关电路:
----------
1945年:冯诺依曼101报告
硬件,操作系统软件、防病毒软件、办公软件、日程生活娱乐软件......
冯诺依曼体系结构:
算术逻辑单元、控制单元、存储单元、输入设备、输出设备
将CPU与存储器分开并非十全十美,反而会导致所谓的冯·诺伊曼瓶颈(von Neumann bottleneck):在CPU与存储器之间的流量(数据传输率)与存储器的容量相比起来相当小,在现代计算机中,流量与CPU的工作效率相比之下非常小,在某些情况下(当CPU需要在巨大的数据上运行一些简单指令时),数据流量就成了整体效率非常严重的限制。CPU将会在数据输入或输出存储器时闲置。由于CPU速度远大于存储器读写速率,因此瓶颈问题越来越严重。
而冯·诺伊曼瓶颈是约翰·巴科斯在1977年ACM图灵奖得奖致词时第一次出现,根据巴科斯所言:
“……确实有一个变更存储设备的方法,比借由冯·诺伊曼瓶颈流通大量数据更为先进。瓶颈这词不仅是对于问题本身数据流量的叙述,更重要地,也是个使我们的思考方法局限在‘一次一字符’模式的智能瓶颈。它使我们怯于思考更广泛的概念。因此编程成为一种计划与详述通过冯·诺伊曼瓶颈的字符数据流,且大部分的问题不在于数据的特征,而是如何找出数据。”
在CPU与存储器间的高速缓存存储器抒解了冯·诺伊曼瓶颈的性能问题......
----------
数据流量相较CPU的工作效率小,所以CPU计算的速度相对较快,但是如果数据量较大,将数据输入或输出存储器需要较长的时间,这个时间里面,CPU的算力就会闲置。这对于进一步提升计算机的算力是一个瓶颈一样的限制。可能的克服方法:(1)CPU的寄存器,可能提高一些数据的存取效率;(2)分布式计算,或者并行式计算,我曾经看过林子雨老师“大数据原理与应用”网课,其中有介绍到数据量大的时候可以采用分布式存储,而在做计算的时候,可以用程序去靠近数据,而不是让数据跟着程序走。我想,在不同分机上针对不同数据分别进行一部分计算,最后加以分析汇总,这样可能有助于克服冯·诺依曼瓶颈的一些问题。
由于指令与数据放在同一内存带来的CPU利用率(吞吐率)限制就是冯诺依曼瓶颈
冯诺依曼瓶颈的缓解办法有:
1.在CPU和主存之间提供高速缓存
2.为数据和指令提供单独的缓存或单独的访问路径(所谓的改良哈佛体系结构)
3.使用分支预测器算法和逻辑
4.提供有限的CPU堆栈或其他片上草稿行内存以减少内存访问