冯·诺依曼模型和图灵模型实际上不是一回事吗?

如何解决冯·诺依曼模型和图灵模型实际上不是一回事吗?

根据我的理解,图灵模型由I / O数据,CPU和“程序”组成。 “程序”用于配置CPU如何处理输入数据以产生输出数据。如果我们更改程序,则CPU将以不同方式处理输入,并且获得不同的输出。

冯·诺伊曼(von Neumann)模型在逻辑上将I / O和程序组合为一个....可以,但是实际上在设计计算机时这有什么区别?当冯·诺依曼的模型只是图灵模型的修改版时,为什么会注明呢?这是否意味着像智能手机这样的现代计算机是冯·诺依曼计算机(而不是图灵计算机),因为它们具有程序和I / O集成?因为程序(墨盒)可以从心理上与CPU和I / O数据区分开来,是否将旧式游戏机视为Turing计算机(而不是von Neumann计算机)?有人请给我一些见识。

解决方法

所有现实世界中的商用CPU设计都是冯·诺依曼(von Neumann)架构,或者是它的一个较小变体:Harvard architecture,其中程序存储器与数据存储器分开。当您拥有一个单独的地址空间并连接到物理上独立的内存(通常是非易失性的且只读的,或者至少编程速度较慢)时,哈佛就是这样。 True Harvard通常仅在用于嵌入式系统的微控制器中找到,这些微控制器不需要随时运行新程序的能力。

冯·诺依曼与哈佛大学的区别是,允许​​带有“程序”的控制台盒带存储在只读存储器中。

请注意,约翰·冯·诺伊曼(John von Neumann)是一个很酷的人,有很多以他命名的东西。在一种情况下,“冯·诺依曼”可能与在另一种情况下与“冯·诺依曼”不同。例如冯·诺依曼(von Neumann)与完全不同的计算模型(如有限自动机,也称为生命游戏)更多地是关于串行存储程序计算机与固有并行事物的关系,而不是哈佛与冯·诺依曼在存储程序计算机中的区别。参见Is C++ considered a Von Neumann programming language?

哈佛机器仍然以与冯·诺伊曼(von Neumann)相同的方式存储程序,就像CPU提取内存中的字节一样。(虽然公平地说,通用图灵机也从程序中读取程序磁带在开始运行之前就可以运行,但是一旦运行,内部的表示形式就可以了,像这样的现实生活中的x86 CPU已经存在,例如Transmeta Crusoe在内部将x86机器代码动态地重新编译为VLIW CPU的代码,或者现代的Sandybridge和Zen家族已经解码了uop缓存,而不是重新解码x86机器代码,但是它们只是缓存,可以在执行新的,更改的或从缓存中撤出的区域时重新获取x86机器代码。 >


“图灵机”意味着沿着磁带或类似磁带移动的非随机存取存储器。在硬件中构建有限的图灵机将意味着您的内存是一个巨大的移位寄存器或某种东西(可能比普通DRAM或SRAM密度更高,但密度更高),或者是物理磁带或鼓式存储器,它们在程序控制下而不是恒定速度移动(可能很糟糕)。 )。

您可以在现实生活中构建实用的(有限的)图灵机,但是这将很难编程并且速度非常慢。我怀疑任何商业设计都曾经是那样。显然,这对性能和易于编程乃至计算的O(f(n))时间复杂度都是不利的。

请注意,复杂度分析取决于计算模型:我们通常假设随机访问和串行计算(例如将所有已完成的操作加在一起)。如果我们有computational memory,在这里您可以要求成组的存储器单元并行地递增自身,或者找到它与一组邻居之间的最小值,则可能会降低某些事情的复杂度。

串行计算瓶颈是所有计算都发生在“ CPU”中的内在条件,而CPU一次只能做一件事。 (或者在实践中,使用超标量流水线式执行一次可以完成大约4件事,或者在SIMD之上是4到16的其他因素。但是这些都是不变的因素,不会随问题的规模而扩展。会影响问题的复杂度等级,例如在未排序的数组上查找最小值。

(可以将“ von Neumann bottleneck”狭义地定义为需要从外部存储器实际获取数据和程序,这可以通过缓存(包括在统一的L2(又名经过修改的哈佛)上分离的L1d / L1i缓存)大大缓解。由CPU读取指令流所施加的串行计算模型可能不属于该标题。相关内容:Does the Harvard architecture have the von Neumann bottleneck?


通常出于理论CS的目的,我们仅谈论理想的无边界图灵机,因为它们在为复杂的现实世界任务编程时费力。任何可计算的东西都可以在图灵机上计算,但是效率不高。 (假设unprovable(?) Church/Turing thesis为真,以及其他任何正式警告。)

当您想用比形式化计数伪代码中的操作更多的形式主义谈论效率时,您需要一个类似于真实计算机的正式抽象计算模型。一个示例就是抽象的CS随机访问计算机(wikipedia)

它的程序与RAM分开,这是一种哈佛体系结构。

在RAM中可以进行自我修改的程序 是一台RASP(随机访问存储程序)和一台理想的Von Neumann机器。

因此,不,冯·诺依曼与图灵不是现实世界还是理论界。两种类型都可以在现实生活中构建,并且两种类型的抽象模型都存在并已被使用。容易犯这个错误,是因为您永远不会看到现实生活中使用的图灵机,并且通常对冯·诺依曼体系结构的讨论都集中在现实生活的硬件上。

抽象RAM机器尤其可用于分析 parallel 算法。 (PRAM =并行RAM型号)。在他们的右脑中,没有人希望并行的图灵机在同一盘磁带上穿梭。 PRAM对真实的CPU进行了很好的建模,足以证明算法无等待,无锁或无障碍(wiki)。

,

区别在于,图灵机是用于讨论计算/可计算性的数学构造。这些在现实中是无限的。图灵机具有无限内存,Lambda微积分允许无限递归。

尽管冯·诺依曼建筑学与哈佛建筑学是一种特殊的计算机构建方式,但由于它们是作为物理对象存在的,因此它们都不能被视为数学概念,尽管某些数学通常会进入工程学。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -> systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping("/hires") public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate<String
使用vite构建项目报错 C:\Users\ychen\work>npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)> insert overwrite table dwd_trade_cart_add_inc > select data.id, > data.user_id, > data.course_id, > date_format(
错误1 hive (edu)> insert into huanhuan values(1,'haoge'); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive> show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 <configuration> <property> <name>yarn.nodemanager.res