五千年(敝帚自珍)

主题:【原创】我的chatGPT的使用体验 -- Swell

共:💬285 🌺1767 🌵12 新:
全看分页树展 · 主题 跟帖
家园 虽然过去很久了,看来还是需要补充一下

关于图灵机,它主要是“计算”理论上用来表示计算模型的虚拟机器,而且存在不只一种图灵机,而是存在多种(甚至无穷多种)图灵机,理论上每个计算过程(也就是程序)都可以看成一台图灵机。但有一种图灵机是其中的战斗机:通用图灵机,可以模拟任意的(良好)图灵机(包括它自己)。而通用图灵机也有好几种模型:比如标准图灵机,带不动选择的图灵机,单向无穷带图灵机,离线图灵机,多带图灵机,多维图灵机,非确定性图灵机等。所有通用图灵机理论上一样强大,而且都是最强,都可以跑一切(良好)程序。所以没有“超越”“不属于”图灵机这种说法(传说中的“超计算”除外)。图灵机模型的提出和其他计算模型(lanbda算子,算盘机,有限状态机,元胞自动机等,其实神经网络也是)一样,主要是在理论上把“计算”这个抽线概念变成可操作可证明的数学过程,主要用来进行计算理论的探索,比如定理的证明等。

相比其他计算模型,图灵机模型的最大有点就是直观,在图灵发表论文之前其实可计算问题已经基本用lambda算子(递归函数论)解决了,但这篇论文仍然因为其直观因而被认为“有趣”而作为原创发表了。但这同样是图灵机模型的缺点:这种直观的方式并不是数学家们习惯的方式,所以实际用起来并不是很好用。用lambda算子能很简洁证明的问题用图灵机做起来很繁琐而且不容易理解。所以有些人认为图灵的地位是被人为拔高了:他虽然参加过计算机的研制但实际上没起到重要作用,但因为图灵机模型容易为大众理解,且其个人经历比较传奇,因而在其造成的影响比其他人更大。另外计算理论在数学里其实是个相当“小”的学科,其他大牛在这方面可能只是副业,也没人想和他争什么。

顺便说一下关于所谓的“计算机科学”,很多人认为他并不是真正的“科学”,也就是“自然哲学”,但也不是纯粹的“技术”,而更像一种“技艺”。比如《计算机程序的构造和解释》(SICP)里提到的计算机科学的核心概念包括:抽象,递归,解释器,以及元语言抽象等。这里很少有纯理论的东西,更多的是理论和应用的有机结合。我导师当年说计算机科学里,只有能实现,最好是有大规模应用的成果才是真的好成果。另外,“计算机科学”甚至不是关于“计算机”的(至少不是主要的),就象“几何学-土地测量学”不是关于“土地”和“尺规”的。

下面说说冯诺依曼架构。

前面说的“图灵机”是属于“计算”科学的,而冯诺依曼架构则属于一种技术,勉强算得上“计算机科学”。指的是在第二台数字电子计算机EDVAC上用到的架构,也称普林斯顿架构。原来是指“存储程序计算机”,单看“存储程序计算机”这几个字完全看不出冯诺依曼架构的伟大之处,但如果和第一台电子计算机ENIAC比就很明显了。

其实ENIAC不是第一台电子计算机,它的专利后来被撤销了,第一台电子计算机是ABC(Atanasoff–Berry Computer)。ENIAC其实是第一台“通用”电子计算机。这里的“通用”和“通用图灵机”里的通用既有联系又有区别:说有联系是指ENIAC的拓扑结构和标准图灵机类似,而且它包含“图灵完备”所必须的三种指令(顺序,选择,无限循环);说有区别是指这个“通用”更多的是指“可编程”,ABC只能跑解方程的固定程序,而ENIAC可以根据需要跑不同的程序。而它的架构后来称为“哈佛架构”,这个名字来源于“哈佛马克I”计算机。但这台机器实际是一台机电计算机,而且它的所谓的“哈佛架构”也不是原创的,而是采用了当时“成熟”的技术,这种设计,实际上在巴贝奇设计的“分析机”里就出现了,而巴贝奇也不是首创,面是受到贾卡提花机的影响,而从实际效果来看,ENIAC的编程方式和原始提花机的“挑花结本”更为接近,不仅形似,而且神似。

点看全图

点看全图

所以,要在ENIAC上切换程序,需要要手工在布线接板(控制器)设置开关来完成编程工作, 和提花机上重新换“花本”是一样的:跑程序之前要几天甚至几个月的准备工作。这无疑是非常不灵活而且限制运行的程序大小。你能想象想玩超级玛丽先开机然后等几个月再来玩吗?或者把Windows的可执行代码抄一遍?或者在CPU里自带一个Windows?(较新的Intel ME芯片里确实带了一个MINIX操作系统的修改版)。

这样一比就看出“把程序放在存储器”里的好处来了。一是简化了控制器,不需要把程序放到时控制器里,而只要一套从存储器里取出,分析并执行指令的机构就够了;二是灵活性:想跑什么程序直接把程序读到内存里就行了,避免了手工设置程序的麻烦。那时候内存还在用水银延迟线,外存用穿孔纸带,虽然和现在比起来很慢,但无疑比手工快多了(而且自然产生了存储器分级的设计);三是大大提高了计算机的利用率,降低了使用成本,使得很多较低价值的程序也有了到计算机上跑的机会。(最初的计算机都很昂贵,是“建造”出来而不是“制造/生产”出来的,IBM的托马斯·沃森说“我想,5台主机足以满足整个世界市场”,很可能是因为那时候值得在电脑上跑的程序真的没多少)。现代计算机的普及除了成本的下降以外大部分就是冯诺依曼架构的功劳。

然而成也萧何、败也萧何,冯诺依曼架构的缺陷也是由存储器造成的:存储器的速度远远落后于CPU的速度,而且差距越来越大,甚至达到百倍以上。

这使得存储器成为了瓶颈,计算机的速度受限于存储器的速度(还有带宽和能耗),也就是“内存墙”。过去几十年对这个问题已经有了很多方案,如更大更多的缓存结构,更复杂的缓存算法,分支预测,乱序执行,超标量、超长指令字,超级流水线,编译器优化等等减弱这个问题的影响。

点看全图

外链图片需谨慎,可能会被源头改

点看全图

外链图片需谨慎,可能会被源头改

其实非冯诺依曼架构的机器一直存在,ENIAC也用了十年。不过大部分此类机器都是专用机,比如专门处理特定类型数据的数据流机,还有最新的量子计算机。即使冯诺依曼架构的电脑里也可能有各种辅助处理器,比如早期PC里的浮点数协处理器,任天堂游戏机里专门处理图像的PPU,电脑里的某些显卡等等。换句话说,在需要频繁切换程序的“通用”计算机领域,目前看只有且只有冯诺依曼架构能满足需求,而不怎么需要切换程序的场景,如果要求很高的处理速度且对成本不太敏感则可以考虑非冯诺依曼架构机器。甚至自己烧个FPGA只给自己用。

而且哈佛架构也发展出改进的哈佛架构,也采用了“存储程序”的概念,这样和冯诺依曼架构的区别就很小了,只是看程序和数据是否共用一条总线。而且现代计算机实际上大都是混合架构,拿PC举例,Intel从586开始,CPU内程序和数据就分开处理了,也就是说是哈佛架构,但从整台机器上看又是冯诺依曼架构。

最近又提出(近)内存计算/存算一体等概念,把运算部件尽可能靠近内存甚至直接混合在一起,但目前还主要用在专用领域。(现在装显卡和NVME硬盘都要注意PCIE插槽是不是直接连CPU,装错了会发挥不出应有的性能)。

最后值得一提的就是当初的“第五代计算机”也是非冯诺依曼架构,虽然当年这个计划失败了,但最近机器学习领域的进展(如ChatGPT)说明专用机也有可能象“通用机”那样普及起来。

通宝推:唐家山,菜根谭,
全看分页树展 · 主题 跟帖


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河