冯·诺依曼的绝密程序,让世界上多了一个高薪职业!

news2024/11/27 16:09:59

1

一次偶遇

1944年春天,戈德斯坦上校在阿伯丁火车站台上偶遇大神冯·诺依曼。

502d51fe4342a54a89654c4d0c4e7f35.png

戈德斯坦壮起胆子,拘谨地和冯·诺依曼聊起来。

幸运的是,冯·诺依曼热情而友善,让戈德斯坦很放松。

当冯·诺依曼得知戈德斯坦正在宾夕法尼亚大学研制电子计算机,每秒可以进行333次乘法运算的时候,谈话的气氛骤然改变:

不再是轻松幽默的闲谈,更像是数学博士论文的口头答辩。

冯·诺伊曼参与了绝密的曼哈顿工程,原子弹内爆所需的大量计算让人望而生畏,所以他对电子计算机机感兴趣。

戈德斯坦顺水推舟,邀请冯·诺伊曼担任世界上第一台电子计算机ENIAC研制顾问。

此时ENIAC的研制已经进行了18个月,但是天才的冯诺依曼一上来就注意到了ENIAC逻辑设计有个大缺陷:需要手工调整电路线路,才能指挥近2万个电子管干活。

cb024fd89f18aa997d36777f47b6381f.png

在和艾克特、莫奇利等人的讨论中,冯·诺伊曼等人找到了电子计算机关键的想法:存储程序

2

存储程序

我在上学的时候一直不理解为什么叫存储程序,其实一个例子可以轻松说明它的概念。

假设我们要计算3*2+5,人脑是这么计算的:

3*2 = 6 , 把中间结果暂时记在脑子中,然后 6+5 = 11。 

计算机会把3、2、5这三个数字保存在内存中,把计算过程的描述(指令)也保存在内存中,然后取出指令一条条运算:

d277c3362089ef30fc79cb8dce9f7900.png

简单来说,就是:

(1)指令也用数字的方式来表示

(2)和数字一样,指令也保存在存储器中

在我们现在看来,存储程序的概念非常自然,它就如同轮子的发明,一旦想到就不在困难。 

1d3197c41c2c06aa32bd4be163fcc885.png

但是,存储程序的伟大之处在于,它释放了计算机的巨大潜力,计算机不再是为了某一目的而构建的专有计算机。

各类“存储的”程序可以瞬间将一台用于文字编辑的计算机变成一台可以上网的计算机。 

599cd8a9120320131c6552b79847e510.png

3

绝密程序

1946年4月,他们决定建造一个新的计算机EDVAC来实现这个想法。

受到二战结束和工人专业的影响,EDVAC直到1952年才建造完成,并投入弹道研究实验室使用。

5146b2554194007631c4e79b6d95f30a.png

EDVAC不但有架构和逻辑的改进(存储程序),还包含了高速串行存取存储器,存储容量高达“5.6KB”。

这样的计算机用来做数值运算肯定没问题,但是能不能成为一个通用的机器呢?它的指令集是否提供了让人满意的逻辑控制? 

如果可以的话,存储程序计算机就可以进入更广阔的天地,比如商业处理。

冯·诺伊曼决定写一个程序,对EDVAC的能力做一个“测试”。

当时IBM有一个叫做IBM Collators的机器, 可以将两叠已排序好的卡片合并成一叠,当然最终的结果也是排序好的。

a4b59bdd8c8c4eeda7672ca0654dd93b.png

熟悉算法的同学立刻就会意识到,这就是“合并排序”中的一个步骤嘛!

IBM的这台机器给冯·诺伊曼提供了一个标准,他也选择了这个主题,写一个“合并”的程序,衡量下EDVAC逻辑控制和计算速度。

这个时候,计算机的研究涉及到军方和军事问题,都被列为机密。

所以在冯·诺伊曼留下的手稿中,依稀还能看到之前用铅笔写下的“绝密”字样。

8f288319caf1dc4a5f6f5d83b6db6c27.png

基于当时 IBM 专用排序机器的工作方式,手稿中制定了以下合并方法:

假设我们有两个列表 x 和 y,每个列表包含已排序的记录。

n' 和 m' 分别是当前正在考虑合并的 x 和 y 列表中的记录的位置指针。

3c8e867e2a09eabebdf72fa2493f716a.png

手稿中根据合并过程的状态分为四种情况:

  • 情况 (a) 两个列表都有剩余记录 (n' < n, m' < m), 这种情况有两个子情况:

    •  (a1) key(x_n') ≤ key(y_m'):如果 x 的当前记录小于等于 y 的当前记录:选取 x 的这条记录,然后 x 的位置指标 n' 增加 1。

    •  (a2) key(x_n') > key(y_m'):如果 x 的当前记录大于 y 的当前记录:选取 y 的这条记录,然后 y 的位置指标 m' 增加 1。

  • 情况 (b) 只有 x 列表有剩余记录 (n' < n, m' = m):操作与子情况 (a1) 相同,继续选取 x 的记录,n' 增加 1。

  • 情况 (c) 只有 y 列表有剩余记录 (n' = n, m' < m):操作与子情况 (a2) 相同,继续选取 y 的记录,m' 增加 1。

  • 情况 (d) 两个列表都没有剩余记录 (n' = n, m' = m):这标志着合并过程的完成。

这段描述看起来很复杂,其实就是一个合并排序中“合并”的过程,这个动图解释得很清楚:

54a2f43ce1ab53d3e5f44c18d08d53c4.gif

冯·诺伊曼后来说到:“EDVAC上的合并程序,确实比IBM专用排序机要快,它的控制逻辑让人满意......根据现有的证据可以得出结论,EDVAC 几乎是一台‘通用’机器。

4

尾声

1957年,冯·诺伊曼因癌症不幸去世,年仅53岁。

十年后,EDVAC早已不在是军事机密,写下《计算机程序设计艺术》的算法之神高德纳在整理合并排序起源的时候,发现了冯·诺伊曼的手稿(一直被戈德斯坦保存者)。

30d0bed7a4909b234ef266a38b0b4f9e.png

高德纳特别写了一篇论文《Von Neumann's First Computer Program 》(冯·诺伊曼的第一个计算程序)来介绍冯·诺伊曼的贡献。

由于冯·诺伊曼的程序看起来特别像数学公式,像这样:

f49f90e1e99980af4fdd7306afbe34ca.png

高德纳非常“贴心”地把它转换成了“容易理解”的汇编:

108a6a60c1fe86ef8a94bf8133c8e1d7.png

如今,合并排序已经成为算法教科书必备的内容(就是似乎不怎么受待见)。

最后,再次向伟大的冯·诺伊曼致敬,他为计算机确定了“存储程序”的思想,并且亲自用一个算法验证了它,从而开启了电子计算机产业,让我们能够在这里混碗饭吃。

后记:这篇文章来自于dingtingli的投稿,我做了修改,结果改着改着完全偏离了原文的重点,想看原文的可以关注dingtingli 的公众号。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1291312.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

打工人副业变现秘籍,某多/某手变现底层引擎-Stable Diffusion简介

Stable Diffusion是2022年发布的深度学习文本到图像生成模型,它主要用于根据文本的描述产生详细图像,尽管它也可以应用于其他任务,如

微信会员卡小程序 多门店系统 满足日常商家的收银功能 附带完整的搭建教程

大家好&#xff0c;今天罗峰来给大家分享一款微信会员卡小程序源码系统&#xff0c;多门店系统&#xff0c;附带完整的搭建教程。 以下是部分代码示例&#xff1a; 系统特色功能一览&#xff1a; 1.多门店管理&#xff1a;系统支持添加多个门店&#xff0c;每个门店可独立管理…

自动化定时发送天气提醒邮件

&#x1f388; 博主&#xff1a;一只程序猿子 &#x1f388; 博客主页&#xff1a;一只程序猿子 博客主页 &#x1f388; 个人介绍&#xff1a;爱好(bushi)编程&#xff01; &#x1f388; 创作不易&#xff1a;如喜欢麻烦您点个&#x1f44d;或者点个⭐&#xff01; &#x1f…

Redis和MySQL双写一致性实用解析

1、背景 先阐明一下Mysql和Redis的关系&#xff1a;Mysql是数据库&#xff0c;用来持久化数据&#xff0c;一定程度上保证数据的可靠性&#xff1b;Redis是用来当缓存&#xff0c;用来提升数据访问的性能。 关于如何保证Mysql和Redis中的数据一致&#xff08;即缓存一致性问题…

C#excel导入dategridview并保存到数据库/dategridview增加一行或几行一键保存数据库

excel导入到dategridview显示并保存到数据库 dategridview增加一行或几行一键保存数据库 ExcelHelper类(这个要导入NPOI包) using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; using NPOI.XSSF.UserModel; using System; using System.Collections.Generic; using Syste…

nginx编译安装及配置文件的修改

目录 编译安装nginx root和alias 升级 nginx访问状态统计配置 基于授权的的访问控制 基于客户端的访问控制 编译安装nginx 1.关闭防火墙&#xff0c;安全机制&#xff0c;去官网下载nginx压缩包&#xff0c;并进行解压 systemctl stop firewalld #关闭防火墙 systemctl…

Linux指令学习

目录 1.ls指令 2.pwd命令 3.cd 指令 4. touch指令 5.mkdir指令 6.rmdir指令 && rm 指令 7.man指令 8.cp指令 9.mv指令 10.cat指令 11.more指令 12.less指令 13.head指令 14.find指令&#xff1a; -name 15.grep指令 16.zip/unzip指令&#xff1a; 17.tar…

创建vue项目:node.js下载安装、配置环境变量,下载安装cnpm,配置npm的目录、镜像,安装vue、搭建vue项目开发环境(保姆级教程一)

今天讲解 Windows 如何创建 vue 项目&#xff0c;搭建 vue 开发环境&#xff0c;这是这个系列的第一章&#xff0c;有什么问题请留言&#xff0c;请点赞收藏&#xff01;&#xff01;&#xff01; 文章目录 一、Vue简单介绍二、开始搭建1、安装node.js环境2、配置npm下载时的默…

Vue 创建组件

组件&#xff1a;用于将某个功能的 HTML、CSS、JS 封装到一个文件中&#xff0c;提高代码的复用性和可维护 性。 基础使用【setup 语法糖写法】 一、在 src / components 文件夹中创建一个组件&#xff0c;文件命名为 MyDemo 。 <template><p class"redColo…

Domino多Web站点托管

大家好&#xff0c;才是真的好。 看到一篇文档&#xff0c;大概讲述的是他在家里架了一台Domino服务器&#xff0c;上面跑了好几个Internet的Web网站&#xff08;使用Internet站点&#xff09;。再租了一台云服务器&#xff0c;上面安装Nginx做了反向代理&#xff0c;代理访问…

vue2-使用vue-i18n搭建多语言切换环境

安装 注意&#xff1a;vue2.0要用8版本的&#xff0c;使用9版本的会报错 npm install vue-i18n8.27.0 --save 创建相关的语言包文件 在src目录下&#xff0c;新建i18n文件夹 在新文件夹i18n中新建langs文件夹&#xff0c;里边放语言文本文件.js zh.js&#xff1a;存…

抽象类和接口(超重点!!)

[本节目标] 1.抽象类 2.接口 3.Object类 1.抽象类 1.1 抽象类概念 在面向对象的概念中&#xff0c;所有的对象都是通过类来描绘的&#xff0c;但是反过来&#xff0c;并不是所有的类都是用来描绘对象的&#xff0c;如果一个类中没有包含足够的信息来描绘一个具体的对象&a…

企业计算机服务器中了mallox勒索病毒如何处理,Mallox勒索病毒解密

随着计算机技术的不断发展&#xff0c;越来越多的企业利用网络来提高工作效率&#xff0c;但随之而来的网络安全威胁也在不断增加&#xff0c;各种勒索病毒种类不断增加&#xff0c;给企业的数据安全带来严重的威胁&#xff0c;影响企业的生产业务开展。近期&#xff0c;云天数…

荣耀手机怎么录屏?必备技巧和软件推荐

“荣耀手机怎么录屏呀&#xff0c;新买的荣耀v50&#xff0c;还没怎么用过&#xff0c;今天玩游戏的时候突然想录屏&#xff0c;却找不到录屏在哪&#xff0c;我记得是有录屏功能的呀&#xff0c;有人知道吗&#xff1f;教教我。” 在智能手机时代&#xff0c;录屏功能已经成为…

跨境电商卖家必备:自养号测评补单的重要性

测评补单对于跨境电商卖家来说&#xff0c;是一种重要的运营手段之一。一个产品想要获得更好的曝光和更高的转化率&#xff0c;需要有一个良好的Listing排名。而在各平台的Listing中&#xff0c;Review占据着较高的权重。一个好的Review能够给用户带来良好的观感&#xff0c;增…

HuggingFace学习笔记--Prompt-Tuning、P-Tuning和Prefix-Tuning高效微调

1--Prompt-Tuning 1-1--Prompt-Tuning介绍 Prompt-Tuning 高效微调只会训练新增的Prompt的表示层&#xff0c;模型的其余参数全部固定&#xff1b; 新增的 Prompt 内容可以分为 Hard Prompt 和 Soft Prompt 两类&#xff1b; Soft prompt 通常指的是一种较为宽泛或模糊的提示&…

MySQL系列(二)——日志篇

MySQL日志 主要包括错误日志、查询日志、慢查询日志、事务日志、二进制日志几大类。其中&#xff0c;比较重要的还要属二进制日志binlog&#xff08;归档日志&#xff09;和事务日志redo log&#xff08;重做日志&#xff09;和undo log&#xff08;回滚日志&#xff09;。 今…

基于安卓聊天APP的设计与实现

安卓聊天APP的设计与实现 摘要 Android在2007年由谷歌发布&#xff0c;移动即时通讯凭借便利快捷的用户体验在即时通讯市场大受欢迎。这个互联网时代产业的新鲜血液凭借着自身优势在互联网市场中的地位越来越重要。 聊天工具的主要功能是为基于互联网的客户端提供实时语音、文…

交易历史记录20231206 记录

昨日回顾&#xff1a; select top 10000 * from dbo.CODEINFO A left join dbo.全部&#xff21;股20231206010101 B ON A.CODE B.代码 left join dbo.全部&#xff21;股20231206CONF D on A.CODED.代码left join dbo.全部&#xff21;股20231206 G on A.CODEG.代码 left…

智慧城市是什么?为什么要建智慧城市?

智慧城市是一个通过现代科技手段推动城市管理和服务创新的概念。 具体来说&#xff0c;它利用信息技术和创新概念&#xff0c;将城市的各个系统和服务集成起来&#xff0c;以提升城市运行效率、优化城市管理和服务&#xff0c;改善市民的生活质量。 为什么要建智慧城市呢&…