如果我理解正确,管道中的停滞/冻结会导致一个时钟周期浪费。如果几个周期(每秒数十亿个周期)浪费,这可能没什么大不了的,甚至在性能方面也无法衡量。但我很好奇什么操作会导致管道泡沫。负载屏障会导致管道停止吗?因为需要从内存/三级缓存中获取数据,还是因为当前管道依赖于最后一条管道的结果而产生泡沫?类似于:
int score = randGen.nextInt(6);
int pay = score * 100; //Dependent on the result of the last pipeline
如果我上面关于内存障碍导致气泡的假设不正确,这是否意味着错误的分支预测、错误的内存共享和加载/存储障碍会使CPU的性能更差(从内存中提取数据并刷新加载和存储缓冲区)?
如果我理解正确,管道中的失速/冻结会导致时钟周期浪费。
或多或少正确。但这对我剩下的答案并不重要。
高级语言(Java)开发人员能否避免CPU管道气泡?
不需要。Java开发人员需要两个层次的抽象来解决(erm)问题。(Java编译为字节码,字节码编译为本机代码。本机代码指令序列将决定是否存在管道暂停等。)
然而,也有一些好消息。HotSpot即时编译器将字节码编译为本机代码,其中包含一个优化器,它应该负责优化指令序列。它可能比你自己手工做的更好。而且这样做不会消耗程序员数小时/数天的时间。(这会让你的老板高兴的!)
我的建议是:别担心。
但是如果你有性能要求,这意味着你需要担心它,我的建议是:
但是请记住,经过所有的时间和努力,这两者都不能保证您的应用程序更快。
关于pattersson书中提到的MIPS汇编语言,我有一个问题,就是在指令之间插入NOP以避免管道暂停。 考虑以下代码 我们看到在和之间存在$s5的RAW危险。在和之间还有$s5的WAW危险。所以我们必须插入两个NOP以避免停顿。换句话说,流水线图是 当要执行sw时,必须等待lw将数据放入寄存器。因此,存在一个泡沫。此外,当添加想要写入最终结果时,它必须等待上一条指令的完成()。这是另一个泡沫。
问题内容: 我需要经验丰富的程序员的帮助。我想提高我的MVC技能。但是我找不到关于MVC的Google优秀教程。Google始终会为“初学者提供MVC”。 我了解MVC是什么并且可以实现,但是我没有足够的经验来做OOP实用的东西。 如果有人知道MVC的优秀面向对象教程,请引导我到正确的地方-我正在寻找好的链接,书籍等。 问题答案: 包含仅PHP材料的链接带有标记,以便于识别。 在全面了解OOP之前
信息:java:编译模块'jactor-commons'时发生错误信息:Javac 10.0.1用于编译java源代码信息:29/10/2018,21:31-编译完成,4 s 777毫秒内有1个错误和0个警告错误:java:不支持版本5
问题内容: 是否有任何非痛苦的方式来升级Eclipse安装?我曾尝试浏览过Eclipse网站,但找不到有用的描述。 问题答案: 将更新URL添加到您的可用站点: 窗口 >首选项>安装/更新>可用软件站点>添加… 然后告诉Eclipse查找更新: 帮助 >检查更新。 安装后,Eclipse将重新启动并显示旧的启动屏幕。下次您手动停止/启动Eclipse时,它将正确显示正确的启动屏幕。
程序员用各种编程语言编写指令,有些是计算机直接理解的,有些则需要中间翻译(tranlation)的步骤。如今使用的计算机语言有几百种,可以分为三大类: 机器语言 汇编语言 高级语言 任何计算机只能直接理解本身酌机器语言(machine language)。机器语言是特定计算机的自然语言,由计算机的硬件设计定义。机器语言通常由一系列数字组成(最终简化0和1),让计算机一次一个地执行最基本的操作。机器
高级语言有数百种,但被广泛采用的只有少数几种。(COmmon Business Oriented Language)是1954到]957年之间由IBM公司开发的,在需要复杂数学计算的科学和工程项目中应用较多。FORTRAN仍然在工程领域广为使用。 COBOL(COmmon Business Oriented Language)是1959年由计算机制造商、政府和工业企业计算机用户开发的。COBOL擅