硬件处理和软件处理之间的异同与边界

今天给一朋友回复邮件,主要内容是我最近两天的一个DxR
Pro++的固化问题,他好像不明白我为什么一直避开查找树,其实我自己的也不明白,只是知道该避开,也就避开了,并且这还不够,同时避开的还有各种其它
的查找,排序,hash算法,几乎是一切算法都尽量让我避开了。所以,最终,我的DxR Pro固化设计虽然初步完成(这个设计没有公开,也不准备公开,但是我觉得思想比方法更重要,而这种思想正是我在本文想阐述的),但是和我之前博客上所述的有所不同,在那篇文章中,我在某些情况下退回到了二分区间查找。

我们来看看各种计算机算法,它们在做什么,以及是怎样做的。很显然,总结一句话就是:合理安排先做什么,再做什么的一个动作序列。这些序列是发生在一维时
间的流逝里面的,虽然目前有很多的并行算法,让人看起来好像时间变成了一个平面,但是只要这些算法是CPU实施的,当它们不能在分解的时候,算法还是在先
做什么,再做什么之间不断做决策。二分查找,快速排序,这些不都是典范吗?仔细分析一下冒泡排序,先做什么,再做什么,然后做什么...最后得到了结果。
一个动作直接就是问题的一部分。这完全符合我们人类的思维,因为我们在做任何事的时候,都是在不断决策先做什么,后做什么。这就是数学上的统筹学。
       硬件实现的高效等价方案以另一种完全不同的方式工作,它更加类似我们人类的大脑内部的神经网络的工作原理。由于对这个大脑工作原理的解释超出了我的能力范围,即便我真的懂,也不能指望在一篇周末将要结束的短文中阐释清楚,所以我还是直接说硬件吧。

硬件工作时更像是势能的自发释放,这种释放的效果是事先确定的,完全自动进行。举一个例子,洪水泛滥的时候,水流沿着沟壑冲刷大地,造成的效果取决于哪里
高,哪里低,并且由于这种高高低低的不同,还会出现一些组合效果,比如一流分成两流,在一个低洼处再次合并,这就会加倍水流的冲击力,从而越过更高的地
方。你可以将这看成万众一心的万马奔腾。在一个大型的灌溉系统中,事先接好管道,挖好沟渠,然后在水源处放水,一切都是自动完成的,完全无人值守。如果按
照CPU的方式,必须事先准备好一些序列-注意不是挖好沟渠,然后依次执行这些序列,比如先浇灌A区,然后再浇灌B区,由于D区离B区更近,因此接下来浇
灌D区而不是C区...当然在更低的层次,比如具体的浇灌过程,事情是按照硬件的方式执行的。
      
虽然CPU总是顺序地执行一个序列的每一条指令,但是在CPU内部,执行每一条具体指令的方式却是一个势能释放的过程,CPU设计者早就设计好了几个通用
的指令电路,所谓的RISC就是指CPU内部的电路仅仅实现了非常简单非常基本的几个指令,然后靠外部的不同组合形成不同的程序,完成不同的事情。这就是
程序设计的本质。对于诸如DxR
Pro++固化这样的事情,事实上并不能按照程序设计的一般思路来进行,因为它是完全相反的一个过程,我要设计的是一个万马奔腾的势能释放的方案,我要做
的是挖沟填壑,开山辟土,而不是思考一个如何在既有的康庄大道上到达目的地的方案。
      
硬件是死的,程序是活的。一旦沟壑确定,势能释放的效果就完全确定了,因此这块电路就不能再做它用,但是程序却是可以随意更改的,因为CPU内部虽然也是
遍布沟壑,也是死的,但是它们数量比较多,而且每一种达到的效果非常有限,可以通过不同的将它们组合的方式形成不同的效果。这种局面涉及到了一个很重要的
话题,那就是成本!
      
挖沟填壑的成本非常之高,必须确定这种沟壑的势能释放效果是长期可用且有效的,否则就浪费了。而软件却是可以用非常低的成本重组序列的,如今程序员不是已
经快成为廉价劳动力了么?然而软件的性能和硬件直接布线的性能是没法比的,这也是一种代偿博弈,牺牲了性能,带来了灵活性。如今的程序员几乎都是在CPU
所框住的框架内寻求最佳的算法,因为直接用硬件布线来实现功能并不是他们可以决策的,因为这涉及到成本问题,也就是钱的问题,必须在程序员雇佣成本和投资
成本之间做一个完美的权衡。
      
其实早就形成了一种所谓的“可编程硬件”,即内部的沟壑可以填平,然后重新挖沟,也就是硬件可以重新布线。这种东西的成本介于纯布线硬件和软件之间。但是
更加有意义的一件事是CISC和RISC之间的战争,它们几乎在划定软件和硬件边界的争夺中持续着遍布阴谋阳谋的惨烈对决,如今已经分不出它们的边界了,
也无法说出一款具体的CPU到底是哪个阵营的,就好像罗马帝国奔溃后的民族融合一样,也如五胡乱华过后的中华民族一般。柏拉图式的分类过时了,我只想说。

在CPU上编程的程序员们也许会认为我是个小丑,说实话我就是,因为我懂的语言不多,不管是自然语言还是计算机语言,计算机语言而言,我只懂C,JAVA
以及一点脚本语言,C++是我不懂的,PHP也是我从来都没有学会过的,更别提什么LISP,perl,GO,易,D,。。。。了,自然语言而言,普通话
一般,家乡的方言由于离开太久也几乎只剩理论的东西了,交流有点磕巴,更别提什么多国外语了。但是如果要按照语言,架构,系统分类,我属于偏系统的那种
(有些人喜欢各种编程语言且精通很多,可以形而上地揭示这些语言之间的异同,设计思想等,这属于语言型的,有些人喜欢组合不同的组件,他们可以通过组合,
构建出精美的东西,虽然他们对每一个组件都不是深入理解的,这属于架构型的,还有一类人,比如我,喜欢深度研究某一特定领域,和广度型的架构相反,这属于
系统型的)。我觉得,一个团队要是在这三个类型的人当中各有一个,那几乎就无敌了,再加上一个干活打酱油的,够了,滴蜡人月神话....有点跑题了,写到
这里,感觉有点像在招聘,也有点像在自荐,更多的或许有点在装逼,不管怎样,这篇文章就此结束,家人在客厅看无聊的电视,我在卧室写无聊的文章。

时间: 2024-12-17 10:50:26

硬件处理和软件处理之间的异同与边界的相关文章

linux学习之路之磁盘阵列RAID及硬件RAID和软件RAID的区别

我们知道单个磁盘存储数据的容量是有限的,为了让磁盘的容量增大,我们可以将多个较小的磁盘组合在一起,形成一个较大的磁盘装置,这就是RAID(独立式磁盘阵列),RAID不仅可以提高数据的存储容量,也可以提高数据保护功能,不同级别的RAID,所提供的的功能各不一样. RAID常见的级别有RAID0,RAID1,RAID5,RAID10,RAID01,RAID5,RAID50 下面逐个介绍这些级别的工作原理. RAID0:首先将磁盘分成等量的数据块(CHUNK),然后在将存储的数据切分成符合CHUNK大

什么是硬件加密与软件加密,有什么区别?

硬件加密与软件加密的定义 1.硬件加密是通过专用加密芯片或独立的处理芯片等实现密码运算.将加密芯片.专有电子钥匙.硬盘一一对应到一起时,加密芯片将把加密芯片信息.专有钥匙信息.硬盘信息进行对应并做加密运算,同时写入硬盘的主分区表. 2.软件加密就是用户在发送信息前,先调用信息安全模块对信息进行加密,然后发送,到达接收方后,由用户使用相应的解密软件进行解密并还原. 硬件加密与软件加密的特点和区别 一.硬件加密具备以下特点: 1.使用安置在加密闪存盘上的专用处理器: 2.处理器包含一个随机生成器,该

路由器开发(一)—— 路由器硬件结构及软件体系

一.路由器的硬件构成  路由器主要由以下几个部分组成:输入/输出接口部分.包转发或交换结构部分(switching fabric).路由计算或处理部分.如图所示 图1    路由器的基本组成 输入端口是物理链路和输入包的进口处.端口通常由线卡提供,一块线卡一般支持4.8或16个端口,一个输入端口具有许多功能.第一个功能是进行数据链路层的封装和解封装.第二个功能是在转发表中查找输入包目的地址从而决定目的端口(称为路由查找),路由查找可以使用一般的硬件来实现,或者通过在每块线卡上嵌入一个微处理器来完

关于commonjs,AMD,CMD之间的异同

1.简介 随着前端业务复杂度的增加,模块化成为一个大的趋势.而在ES6还未被浏览器所支持的情况下,commonjs作为ES6中标准模块加载方案,在客服端中的支持情况并不好,现在在客服端中有2中模块化的解决方案,CMD和AMD,他们的代表分别为seajs和requirejs.这篇文章主要介绍我对commonjs.AMD以及CMD的理解. 2.commonJS commonjs的目标是制定一个js模块化的标准,它的目标制定一个可以同时在客服端和服务端运行的模块.这些模块拥有自己独立的作用域,也可以向

http和https之间的异同,get和post请求异同

http请求和https请求异同 1.1 http和https的概念 http:客户端和服务端进行请求和回答的协议,它可以使浏览器更加高效,使网络传输减少. http:安全版的http传输协议 1.2 http和https之间的区别 1. https协议需要到ca上申请证书, 原文地址:https://www.cnblogs.com/zhangchiblog/p/8977984.html

sessionStorage localStorage 和 cookie 之间的异同

(转) sessionStorage 和 localStorage 是HTML5 Web Storage API 提供的,可以方便的在web请求之间保存数据.有了本地数据,就可以避免数据在浏览器和服务器间不必要地来回传递. sessionStorage.localStorage.cookie都是在浏览器端存储的数据,其中sessionStorage的概念很特别,引入了一个"浏览器窗口"的概念.sessionStorage是在同源的同窗口(或tab)中,始终存在的数据.也就是说只要这个浏

硬件创新、软件升级 洗衣机行业的变革之道

创新是每个行业赖以生存的基础,而需求是产业创新的思想来源和动力源泉,顾客导向又是企业被动创新的启动器.在与我们日常生活联系异常紧密的家电业,上世纪末洗衣机与电冰箱等白电产品需求大兴盛带来的是整个行业的快速发展.遗憾的是进入新世纪后,在互联网与智能时代全面来袭的背景下,冰洗产品中的大多数任然驻足于之前的技术与产品思路,并未全方面跟上新时代发展的潮流,洗衣机尤是其中典型,产品设计到使用体验都并未发生显著改变.和其他每天都有着新变化的细分领域相比,洗衣机在家庭单位中所占的比重和在家电产业中所占据的市场

EditText 软件键盘之间的控制

1.EditText 不弹出软件键盘 方法一: 在AndroidMainfest.xml中选择哪个activity,设置windowSoftInputMode属性为adjustUnspecified|stateHidden 例如: <activity android:name=".Main" android:label="@string/app_name" android:windowSoftInputMode="adjustUnspecified|

浅谈java中接口与抽象类之间的异同

刚学习java的时候,总觉得接口和抽象类很像,但又说不上具体有什么区别.今天静下来,翻翻书,查查资料,做个小结.首先举两个例子,看看interface和abstract class 在"外形"上有啥异同. 1.先看一下抽象类: abstract class Person{ private String name; private Person(String n) { name=n; } public abstract String getDescription(); public St