绪论
信息处理最基本的在于由已知信息事件产生新的信息事件,整个过程构成了信息事件树,汇集成事件信息森林,最后形成信息森林群落,有用的信息在于关联程度或在于信息树上的复杂度,即信息的可用度在于新信息的自动产生性,按照科学规律的定义,就是要从这种生生不息的信息树中发现规律,当可利用的信息树的分叉程度越来越高时,所能发现的规律就会越有用。处理信息树的自动产生、存储、分发,就是我们现在倡导的信息树理论的最终目的,为达到这个目的,必须设计专用信息CPU。这个信息CPU集网络、信息处理、存储等综合技术,即信息CPU就是网络、就是存储器、就是处理器。
起源
中国的专家教授等一班人整天说要有中国自己的cpu,但是直到现在真正意义上的中国的cpu还没有出现。现在整个计算机产业都是由国外做技术主导,所谓的龙芯、中国芯等都是在国外cpu的基础上设计出来的,这种cpu设计再厉害、再先进也比不上人家国外原创的厉害、先进,我国要在国外强大的技术壁垒面前打开通道谈何容易。问题的关键在于我们没有一种真正创新的、能够主导计算机行业发展的技术。本文所倡导信息CPU技术就是为了解决这个问题的,希望以信息CPU技术为主发展我国自有的计算机技术。cpu是现代信息社会最伟大的发明之一,它是科学家为实现人工智能化发明的副产物。但是近半个世纪过去了,计算机的架构还是更原来刚刚诞生时一样,只不过它的速度变快了、容量变大了,并且基本普及到了千家万户,每个人都享受到了计算机带来的交流畅快的感受,再也离不开计算机了。这与计算机当初的发明背道而驰了,为实现智能化而发明的计算机沦为普通物品,没有了当初诞生时的神秘感,用计算机与农民用锄头基本没有两样。当某些时代代表人物一边高呼“信息时代”“数字时代”“云时代”时,他们的宠儿(计算机)已经不是当初的计算机了,成为人们任意摆弄、抛弃的工具。这其实又跟计算机的本质关联在一起,计算机只是在人类控制下才能运作的工具,只有人类喂它信息粮食,它才能产生新的信息,比巫师还不如。计算机虽然已经沉沦,但是设计cpu、生产cpu却不是一件简单的事,跟锄头的设计、生产有着天差地别,这牵涉到很多的计算机专业知识,没有受过专业训练的人是很难设计出来的,但受过专业训练反而被普通cpu理论所困住,一想到cpu设计,就是指令系统、存储指令、存储数据、ALU、流水线分级等想法,跳出这些东西的反而不知如何下手。其实,做东西应该看本质,普通cpu的本质是什么:处理、存储数据,所有的计算机技术都围绕着这个本质展开设计,如存储采用地址寻址的方式,导致必须采用指令控制整个寻址过程,有了指令后又必须ALU来处理寻址后的数据,然后再进行其他技术枝叶的修正,提高运行效率;又如计算机语言的设计,代码中充满了各种数据符号,各种控制指令的符号,最终目的也是为了处理、存储数据。反观人脑的神经元设计,没有存储的机制、没有处理的机制,只有大量的神经突触相连,并实现了人类以及各种动物生存、求生、繁殖的各种本领,这种神经元的本质与cpu的本质有着非常大的差别。信息cpu的设计应该参考人脑神经元的设计,我们现在不需要非常高速的cpu,而是要具有智能化的cpu,来构成人类未来信息社会的神经元。
设计
信息cpu的本质不在功能,而在于大量的连线,仅有的功能可能就是比较功能:它可以比较各个输入端的值是否满足给定的逻辑比较等式,满足就输出一定的内容,不满足就什么也不输出,其实就是把单个神经元的功能扩展到多个神经元上。信息cpu没有指令系统,因为它只有一个功能,即只有一条指令,为了满足现代编程的需要,可以扩展到连个功能:1逻辑比较、2赋值(信息连线)。信息cpu的代码中每条指令都由信息cpu单元执行,所有指令即cpu单元并行运行的,它没有现代编程中各种弊端:关键字、数据类型、控制语句、变量、数据关联。信息cpu编程非常简单,因为只有一条指令(可以简写为->),差别在于信息输入不一样,调用函数就是一个赋值过程(可以简写=),不用考虑指令的顺序,各条指令是并行运行的。信息cpu、信息cpu指令、信息cpu编程可以几乎没有任何东西:一个功能、一条指令。借用道家思想“道生一、一生二、三生万物”,宇宙间万物生于无,最简单的往往就是最本质的。信息cpu如此设计正是为了体现信息处理的本质“生”,这个“生”就是指令处理过程,由原因产生结果,再由结果产生更多结果,体现信息生生不息的产生方式。姑且把信息cpu、信息cpu指令、信息cpu编程称为道cpu、道指令、道编程。数年前,看到一种中文编程语言即易语言,开始以为这是一种很有哲学的、深奥的、智能的计算机语言,没想到是一种C语言或c++的汉化了的语言,同样的还有一种汉语编程语言,说得冠冕堂皇,实在令人失望。这里把信息cpu、信息cpu指令、信息cpu编程称为道cpu、道指令、道编程只不过引蛇出动,让志同道合者能有更多的思考与创意。
原型设计
“道生一,一生二,二生三,三生万物”讲述了信息生成的基本形式,即“道”作为万物信息生成的源程序,“道生一”即信息万物程序开始运行,产生初始 信息,“一生二”即由初始信息产生中间信息,“二生三”既由中间信息产生中间信息之间的关系,“三生万物”即由中间信息及其中间信息之间的关系产生万物最 终信息,整个过程表现为信息树的发展形式。信息的生成以此环环相扣的形式发展着,推动它发展的动力是什么?《道德经》也给我们指出了答案:“万物负阴而抱 阳,冲气以为和”,万物的发展即信息的生成是在“阴、阳”两种不同属性的信息关系组混合作用下,重新生成一种新的信息,。
中国古人在几千年前就提出了用“阴、阳”两种不同的属性来概括万物的哲学,这相当于为我们提出了宇宙计算机基本模型,也是本文倡导的信息树理论的计 算模型。现代中国人在每每看到外国先进的科学技术时,大都会翻箱倒柜,找出我们古人早就已经发明的证据,最典型的莫过于计算机中的二进制,死活把《周易》 中卦的符合套在二进制上,并延伸到计算机上,以此为荣。其实在真正理解计算机的人看来,采用几进制是根本与计算机无关的,图灵最早提出计算机模型时就没有 提到二进制,计算机本质就是一种自动机,相信如果没有发明二进制,现代计算机也就是另一番景象了。“阴、阳”对于中国人来说是非常熟悉了,生活中到处有它 的影子,如中医“热、寒”、风水“阴、阳”,五行相克相生“克,生”等比比皆是。为什么放着使用了几千年的古人信息模型不用,而偏偏花费巨资用外国“二进 制”计算机呢。
在这里我要把古人的“阴、阳”模型重新利用起来,提出信息树的cpu模型。前面已经定义了信息cpu的基本功能:它可以比较各个信息输入端(必须具 有处理大量信息关联的功能)的值是否满足给定的逻辑比较等式,满足就输出一定的内容,不满足就什么也不输出;信息cpu只有一条指令来处理比较功能,所有 指令由cpu单元并行处理。这个功能关键在逻辑比较功能,这个逻辑比较功能用“阴、阳”来定义:把有关影响生成信息的各种信息划分成不同的组,每组赋予“ 阴、阳”属性,也可用神经元里的“激活、抑制、终止”来表示,在各组里,“阴”、“抑制”的属性优先决定所生成信息是否生成。
信息指令设计
按照上述模型,信息指令定义如下:
[原信息1, 原信息2, 原信息3][ 原信息4, 原信息5]< 原信息6, 原信息7, 原信息8><原信息9, 原信息10>->生成信息。
“[]”表示“阳”性或“激活”性质。
“<>”表示“阴”性或“抑制”、“终止”性质。
“->”代表运算最后结果:生成信息。
这个如此简单的定义能够支持所有的计算机基本运算吗?其实这个定义是布尔逻辑的另一种表示,布尔逻辑大部分实现为“二进制”用来构造cpu,这里我们直接去掉“二进制”直接构造cpu,这样带来很大的好处:
1、没有“进制”之争。因为去掉“进制”,就无所谓“二进制”、“三进制”孰优孰劣的问题。
2、没有语言关键字之争。因为仅有一条指令,英文表示与汉语表示是一样的。
3、没有“多处理”“单处理”的优劣。信息cpu所有指令是并行的,一个cpu处理同样的程序,两个cpu处理同样的程序。
4、没有“cpu”升级的烦恼。所有的信息cpu只实现一条指令,再先进、再高级的信息cpu也只有一条指令可用。
5、不用为制造“cpu” 烦恼。因为只有一条指令,甚至可以在纸面上模拟出执行指令的过程。
信息技术的发展日新月异,新东西层出不穷,造化留给我们两个选择:继续使用国外cpu带来的复杂信息世界或创造我们自主的信息cpu来构造我们的信息世界,仅以鲁迅的话:“造化又常常为庸人设计,以时间的流驶,来洗涤旧迹”来与志同道合者共勉。
语言设计
信息cpu的指令确定为如下的形式后:[原信息1, 原信息2, 原信息3][ 原信息4, 原信息5]< 原信息6, 原信息7, 原信息8><原信息9, 原信息10>->生成信息。(是否可以增加一个选择信息组形式以便减少编程时所用的指令的数量)接下来的工作就是设计可运行的cpu。cpu既然是为了执行设计的指令的,我们必须规范信息和指令运行时行为,使得cpu设计有章可循。暂定如下规范:1、既取消指令指针,全部指令并行运行(包括函数、过程中的指令)。2、取消循环结构,全部指令一直循环运行。3、取消地址,数据以符号代替(可以增加数组结构的符号表示)。4、取消数据类型计算,数据类型计算蕴含于程序函数中。5、信息可选永久保存在存储介质上。6、信息可选赋值形式。采取上述信息和指令运行时行为规范后,初定信息编程语言形式如下:
/*程序定义*/procename{/*函数定义*/fuctname(param1,param1)(return1,return1){[5361,fgdsgf,gfds][dfg,dfg]<sfgf,dfg,dfg><dfgdf,yu>->dgdf/*>twter表示任意数值,[] 内的表示激活逻辑条件,[][]表示逻辑或的形式,<>内的表示终止逻辑条件,<><>表示逻辑或的形式*/[twter,fgdsgf,gfds][dfg,dfg]<sfgf,dfg,dfg><dfgdf,yu>->$dgdf/*->$dgdf表示进程时间内永久保存(但可被更改)*/[twter,fgdsgf,gfds][dfg,dfg]<sfgf,dfg,dfg><dfgdf,yu>->dgdf=356/*->dgdf=356表示产生的标记有数值*/
[twter=898,fgdsgf=878,gfds][dfg,dfg]<sfgf=767,dfg,dfg><dfgdf,yu>->dgdf/*twter=898,fgdsgf=878表示有值*/[twter,fgdsgf,gfds][dfg,dfg]<sfgf,dfg,dfg><dfgdf,yu>->(rrr=wwer,wsre=werwe)/*条件赋值,->(rrr=wwer,wsre=werwe)表示条件赋值形式*/[twter,fgdsgf,gfds][dfg,dfg]<sfgf,dfg,dfg><dfgdf,yu>->(return1,return1)/*函数条件返回,->(return1,return1)表示函数条件返回形式*/[twter,fgdsgf,gfds][dfg,dfg]<sfgf,dfg,dfg><dfgdf,yu>->procename.fuctname(wer,werwe)(return1,return1)/*函数条件调用,return(param1=wer,param1=werwe)表示函数条件调用形式 */}}
/*以上所有符号都是符号标记,可谓为中文英文*/说明:
1、在上述的信息编程语言中,程序是类,函数也是类的成员。这样当程序完成后,就可以被其它或自己调用了,相当于windows中的“dll”模块或“lib”库。
2、每个语句前面都带有如下形式:[原信息1, 原信息2, 原信息3][ 原信息4, 原信息5]< 原信息6, 原信息7, 原信息8><原信息9, 原信息10>的前置逻辑比较,其含义就是每条语句都先判断、选择、比较,然后再决定是否生成”->”后的信息,除了”->”简单生成信息语句外,还有调用、返回、赋值等语句,这些语句也是采用前置逻辑比较的形式,目的是为了满足全部指令运行的指令规范。
指令的设计与cpu结构设计关联性。
1、指令信息保存形式。当指令信息生成后第二次再运行使用后是否保存,极大影响了cpu结构设计也影响了指令编程,考虑再三后,决定采取可选的保存的形式既带“$”符号就一直保留,其他信息一般在第二次运行使用后就消除了,相当于这些指令只是中间暂时信息。
2、函数的调用方式。程序的函数指令在内存中只有一个,但是每个程序调用时就会产生多个调用,像类的定义,类的定义只有一个,而类的实例化可以有多个,为了满足同时并行运行的函数实例,必须在cpu上设置专用的调用栈内存;
3、函数返回方式。函数返回时必须处理的一些细节,因为函数指令编译后是固化的,它的返回信息符号必须与函数实例化后的句柄挂钩起来,并与原调用函数句柄有关,不像串行指令,可以在栈顶存取函数的返回有关的值。
4、 在信息cpu里设计,最大难题不在前置逻辑比较实现,而在于信息生成后如何处理,像重复信息符号处理、信息生存周期、信息的作用范围、信息的存取、信息的符号与值、cpu结构的优化等,所有这些技术处理与各种指令形式的含义有很大相关性。
5、函数调用、返回、信息赋值是信息生成一种特殊形式,其母的是为了信息程序的复用性,本质上没有破坏信息cpu指令只有一条的宗旨。
可以说一套完整的指令集设计时就已经考虑到了以后的cpu设计,指令集里增加的功能比如增加寄存器、寻址方法、结果值处理等、各种函数调用返回方式 极大影响了cpu的设计,相反cpu的计算功能反而是cpu设计最简单的东西。一套指令集就是一套虚拟计算机,当实现了运行指令集的机器后,也就完成了虚 拟计算机实例化。如计算机语言,语言也是一套虚拟计算机,编译程序把计算机语言编译成可执行文件,编译程序就是计算机语言的虚拟计算机。
多年来,国人常常听到cpu指令集只是一种东西不同的写法,购买指令集只不过是为了一些权宜之计采取的便宜措施,无关大碍,关键是要开拓市场云云。 错了!君不见,当年各大国产汽车商也号称技术引进,更快开拓占领市场云云,最后各大国产汽车商也成了国外汽车技术代理商。二三十年年前国人以求学之心,满 以为完成学业就可以创业了,没想到却从学生变成了学徒,最后成了打工仔。这种教训实在太多了,cpu指令集代表国外占领国内cpu技术市场的隐形杀手,冠 于冠冕堂皇的技术授权,我们就如得了宝贝似的收下来,高兴地设计生产了。君不见,二三十年来,国人举国学英文,直弄的国语也差点忘了,只能写一点俄意奉承 之类的话,到头来,国外技术没学家,又变成了假洋人了。
以《霍元甲》之歌“昏睡百年,国人渐已醒,睁开眼吧,小心看吧,哪个愿臣虏自认”与各位有志之士共勉。
道指令与神经系统
在前面的论述道指令时就指出:
1、“信息cpu的设计参考人脑神经元的设计”;
2、“信息cpu的本质不在功能,而在于大量的连线,仅有的功能可能就是比较功能:它可以比较各个输入端的值是否满足给定的逻辑比较等式,满足就输出一定的内容,不满足就什么也不输出,其实就是把单个神经元的功能扩展到多个神经元上。”
3、考虑到在神经网络、基因运算方便使用此指令和便于信息cpu设计,取消布尔逻辑等式中的“非”混合运算;
重新考虑道指令:
[原信息1, 原信息2, 原信息3][ 原信息4, 原信息5]< 原信息6, 原信息7, 原信息8><原信息9, 原信息10>->生成信息。
现在结合神经学原理论述道指令:一条道指令就是一个广义的神经细胞,道指令中所有的“原信息”代表神经细胞的一个突触,[ , , ]代表由多个神经细胞发出的突触组成一个“激活”触发机制,< , , >代表由多个神经细胞发出的突触组成一个“终止”触发机制,再由许多个这两种类型的触发机制组合成一个总触发机制,由这个总触发机制发出这个神经细 胞的动作“生成信息”,许许多多的的道指令就是许许多多的神经细胞。道指令就是神经细胞,道编程就是人工大脑编程。
现在结合基因理论原理论述道指令:一条道指令就是一个广义的蛋白质生成规则,道指令中所有的“原信息”代表一个基因(蛋白质),[ , , ]代表由多个基因(蛋白质)组成一个“激活”生成蛋白质规则,< , , >代表由多个基因(蛋白质)组成一个“终止”生成基因(蛋白质)规则,再由许多个这两种类型的生成机制组合成一个总生成机制,由这个总生成机制决定 生成结果蛋白质“生成信息”,许许多多的的道指令就是一条DNA。道指令就是基因,道编程就是人工DNA。
前面说过一条道指令就是一个广义的神经细胞,这个广义神经细胞跟实际的神经细胞差别在哪里呢?目前根据报道出来的实际的神经细胞实验数据,神经细胞 突触是没有分类的,神经细胞按照每个突触的生物电水平汇总最后决定神经介质的释放。道指令为何不完全模仿真实的神经细胞动作机制?如果采用真实的神经细胞 动作机制,那么,道指令就是神经网络就不能称之为道指令了。人类认识自然的过程是一个逐步的循序暂进的过程,最后利用科学抽象原理进一步升华,把复杂化为 简单理论。道指令的设计正是一种科学抽象,把复杂的神经工作机制化为简单“阴阳共存”理论,使之适应宇宙间万物转化的规律。
如果一个理论代表的是真理,那么用它可以预测一些未知的现象。在用基因理论原理论述道指令时提出:一条道指令就是一个广义的蛋白质生成规则,这是目 前在实验室还不能验证出来的,用道指令理直气壮提出这个观点,是因为有它的真理性在里面。如有人不相信,请在网上查一查,目前的DNA基因工作机制是否与 本文论述一样。DNA中基因决定蛋白质表达,蛋白质反过来基因表达的开关,蛋白质到底如何影响基因表达的开关现在还没有实验数据,是一个蛋白质影响一个基 因还是像我们道指令指出的多个不同属性组的蛋白质影响基因表达的开关有待于科学实验的论证,在没有证实前姑且把道指令作为基因的工作机制也不会犯错误。反 过来,基因在DNA中只占一小部分,剩下的碱基对用来干什么?科学家还不是很清楚,但按照道编程原理,剩下的碱基对用来对基因表达开关进行编程的,这有待 进一步科学实验。
我为何还在啰嗦“道”,不是异想天开。国内多年来一直到处呼吁的“汉编”“中文编程”“中文cpu”等等之类的我们很多人明知这又是一个“皇帝新装 ”的故事,却偏偏没有指出来。而本文的“道”与这些东西相差十万八千里,“道”是思维指导思想,是符合科学逻辑的,从“道”产生出来的道cpu、道指令、 道编程也是符合科学逻辑的。
道指令与内存cpu
近年来,两大计算机cpu巨头lntel和amd相继在cpu内部嵌入内存控制器,对外都说明这是为了提高内存存取速度,提高cpu的效率。事实是这样的 吗?现在对外资料还不能判断cpu内部嵌入内存控制器的真是意图,但以本人多年来在cpu设计上的经验告诉我,这是cpu设计正在发生重大的变革。
多年前因为感于国内cpu设计落后,对中国未来的计算机信息产业忧心匆匆,竟想凭己之力设计我们自己的cpu。有了这个想法后,从此把很多时间放在 我的cpu的设计上,并且设计了两三套方案,第一:在内存中加入简单的比较功能,使得整个内存就是cpu;第二:设计足够简单的ALU单元,比如只有4位 的ALU单元及辅助控制设备,形成平面阵列,组成大规模运算;第三,利用简单的内存纵横阵列取出一定数列,这些数列送到足够简单的ALU单元去进行运算。 上述几个方案都是遵循小而精的思想并且个人可以掏钱买材料设计出来的原则,因为,当时的任何国内一家芯片设计公司都在国外大公司的技术压力下正向国外技术 靠拢,我只能自己DIY出cpu了。
为何在这里又重提这些陈年旧事?又有许多旧话不得不重提,每当国外提出了一些概念后,我们有些搞技术的就会跳出来,跟在国外的屁股后,嚷着要赶上外 国人之类的话云云。想我中华几千年的文明历史,难道就这么不堪,只会看人家的脸色行事吗?今天,在这里我把本人十几年前设计cpu的经历告诉大家,就想表 明cpu内嵌入内存控制器本质不在提高内存的存取速度,而在于cpu设计行业即将面临重大变革,而这个重大变革不是我们跟着外国人屁股,我们早就已经想到 了。
可能有的人对上述断言又要表示不屑了:又是一个事后诸葛亮,厉害你早拿出来啊。现在我要证明这一切并预测有关的事实。
内存为什么要有控制器,这个问题比较简单,不会的可以在重新查找有关书籍。内存控制器嵌入cpu内,内存存取速度可以提高多少倍,可以估计只要增加 cpu二级、三级缓存,速度没有多大的差别。intel在早期也没有看好这个思路,但后来就改变了看法,也增加了嵌入式的内存控制器,其中最大的原因在 于,内存控制器可以作为一颗相当有效的实现大批量比较功能的协cpu。我们可以从内存控制器嵌入cpu的一些指令特别像比较字符串的指令明显看出来,在外 行人看来是嵌入内存控制器的功劳,实质是cpu设计已经出现了变革。目前,国内还在紧紧地跟在人家后面,可是他不会把这个已经改变了的东西告诉你呀,只有 当你发现了问题,想改变时,他才会把这些内情披露出来。到那时,我们才会感叹,嵌入内存控制器这么好的东西,我们这么想不到啊,国外的科技发展太快了,我 们要加紧学写了。
但是,我告诉你,这个嵌入内存控制器的思路我们早就有了,十几年前,本人还是一个奋发有为的时候,已经开始了比这个嵌入内存控制器更为先进的技术开 发了。这个技术就是:内存即cpu,即在内存中加入简单的比较功能,使得整个内存就是cpu。有的技术就想变魔术,说出来就没什么意思,这个内存即cpu 也是这样。大家在学习SDRAM,DDR的时候,为了提高内存存取效率,一般在DRAM上集成了片上的SRAM,这个SRAM一般比较小几M到几百K之 间,但速度比SRAM快多了。但这也没什么,因为这是国外想出来的,关键我们要在这里加上一些东西即可以大批量比较、转移SRAM值的部件,这可以相当快 速处理字符串、图像的像素。
可能又有人对这不屑一顾,认为这是旁门左道的东西,国外先进技术一般不这样做等等之类的话,但是,请别忘了,当国外这样做的时候,我们可不要后悔。
Cpu设计何去何从,一方面,代表国外最高技术的cpu时时盘踞在我们的头上,由于技术落后及不自信,每当我们技术上有关键突破时,新技术又从我们 手中溜走,另一方面,国外时刻举着兼容市场的大旗,把一切非主流的新思想排至于外,使得人类攀登科学高峰时时落空。我们的Cpu设计再不能这样下去了,要 拿出中国有几千年文明的风度,用我们的智慧创建我们的理想cpu及信息社会。
道指令逻辑设计
有的人不大相信本人有关道cpu的一些构想,以为是从社会科学或党校之类出来骗子。这些人常常高举民族大旗,抵御国外技术入侵,打着为民着想的口号,再经 国内某些专家学者渲染,俨然成了国内某方技术的权威,从此套用国家科研费用,干着挂羊头卖狗肉的勾当。本人绝不是那样的人,遥想当年,我还是一个热血青 年,一心只为实现心中我们自主的cpu。自己掏钱购买大量原版外文经典图书,如《COMPUTER SYSTEM ARCHITECTURE》、《COMPUTER ORGANIZATION AND ARCHITECTURE DESIGN FOR PERFORMANCE》、《ELEMENTS OF THE THERORY OF COMPUTATION》等,为计算机事业付出了大量心血,自今也没有得到半点汇报。顺便说一下,我感觉学了上述三本书,别的cpu设计书籍也不用看了, 国内近年来虽然计算机产业蓬勃发展,但原创的东西还是很少,中文书籍更不用说了。书看多了,对计算机的本质也逐渐认识了,感觉cpu还是受于硬件限制太 多,并且设计越来越复杂,所用工具也越来越复杂,而他的功能却没有大的变化,特别在人工智能方面,简直没有一点进步。因此,近年来在人工智能方面也投入大 量时间,企图将cpu设计、人工智能开发这两个看似毫无关联的东西连在一起,于是,最终形成了信息cpu、信息指令、信息编程即道cpu、道指令、道编程 有关的构想。我经常说所有的创新都是要有基础的,不可能看了《道德经》,把《道德经》翻烂就能设计出一个cpu,不可能看了《易经》,把《易经》翻烂就能设计出一个cpu,不可能不懂计算机软硬件、不可能不懂数学逻辑、不可能不懂软件设计就设计出一个cpu。目前,这个构想已经非常接近本人心中理想cpu,只是还有一些缺陷,特别在语言的设计上过于简朴(主要因为不引进任何语言关键字,杜绝有关中文、英文编程 的弊端)。为何只有一条指令,为何cpu只有比较功能?我说过,这个cpu要融合人工智能,而人工智能要求必须有自我学习的功能,如果设计了大量的指令那 么如何让自我学习的程序选择指令呢,再加上参考神经元、基因的机制,最终选择仅有一条指令的构想。其实可以把这个指令看成由if…then…语句,那么大 家想想由if…then…语句可以处理那些事情,特别在递归函数、专家系统等都可以仅用if…then…语句来处理,推广开来,数学上的计算、信息系统的 编程等都可以处理了。我们的一些专家,为国家搞科技的专家,是不屑于道指令的,仅仅一条道指令如何申请科技经费,说出来就会闹笑话,必以几百条指令为目标,必以国外的cpu为 蓝本,这样才显出科学的复杂,专家的高深,才可以申请到科学经费,否则别人说,仅有一条指令,不用加班加点,小学生就可以做了,到时就不能算专家费、加班 费了,要扬名天下更难了。现在声明一下:道指令系统免费提供,不要什么授权费,仅标上道指令兼容就可以了。(如有雷同者,特指汉芯)
道指令运行机制
大家目前对道cpu的主要疑问是如何运行,如何组织成千上万个道cpu一起并行运行,现在的cpu能有上个并行就不错了,何况道cpu的并行数与道程序的大小有关,故意编上几万行道指令,看它如何运作。在这里,我将为大家揭开这个谜底。道cpu的运行跟我们中国人的思维很想,我们经常说中国人很聪明,具有“整体的思维”,特别像中医,把国人这种“整体的思维”的特性发挥的淋漓尽致,每次 感冒发烧,先判断是由“冷”或“热”引起的,然后索罗一些中和“冷热”的药材猛吃,还说中药没有副作用,还要吃上一些非常古怪的具有特效药材。而外国人的 思维都比较死板,感冒了必须在医院经过一系列的检查过程,逐步排除各种感冒诱因,最后决定吃何种西药。从上可以看出,国人的聪明就是具有“并行”特性,而 外国人的不聪明就具有“单运行”。所以呢,外国人只能发明目前的cpu而发明不了道cpu了。现在来看看道cpu的运作过程,首先,要有一个大熔炉以及炼制草药的一些潜规则(秘方),然后把药草扔到熔炉里,观测熔炉药剂的变化在加上药草,经过这种 炼制,新一代的中药就诞生了。再举一个例子,如何塑造一个国人,首先准备一个社会大熔炉以及一些社会潜规则,把几个亿的国人扔进去,具有“整体思维”的国 人就从此诞生了。以上是道cpu、道指令、道编程的一些实用的例子,现在我们要解密最高级的应用,具设计可用于精确计算的道cpu,首先准备两块内存、一块放各种生成信 息,另一块放道程序,程序要开始运行,必须在生成信息内存放进起始信息,如“主.开始”“宇宙.大爆炸”等信息,随编程而定。然后道cpu就会不停的从信 息生成内存中的信息与道程序的内存比较,每条道指令中要求的信息如有在信息生成内存,那么按照道指令把z指令后的生成的信息在放入信息生成内存中。其实万物都采用这种运行模式,从信息树理论,到DNA、基因也都广泛使用这种模式,前面没有特别指明出来,是觉得以我们国人的聪明应该都会想到,没想到国 人受得外国人的教育多了,都变成“单运行”的思维,所以提倡道cpu正是为国人着想,否则“一年不如一年,人心不古”。
道指令与图灵机
很多人不大认同我的有关道cpu、道指令、道编程的有关构想,主要因为看不懂、没有数学证明、胡扯等。现在引用一些数学理论来解释一下。道cpu、道指 令、道编程是一种自动机,它与图灵机一样有一套状态转换指令表(道指令),一个读写头(道cpu),一张纸带(各种待处理的信息集)。图灵机工作时在每个 时刻,机器头都要从当前纸带上读入一个方格信息,然后结合自己的内部状态查找状态转换指令表,根据程序输出信息到纸带方格上,并转换自己的内部状态,然后 进行移动。道自动机工作时,道cpu先从各种待处理的信息读出所有信息,然后对所有的道指令进行比较,满足指令的要求时,输出结果信息,并把所有的结果信 息送到待处理的信息集中,等待下一次动作。如何让道自动机模拟图灵机呢?把图灵机纸带各种格子标上不同标记,格子信息就是标记的值,内部状态内部状态也用 一个标记代替,状态就是标记的值,移动方向就是他的值,状态转换指令表用道指令表示。如:格子信息=H,内部状态=“很轻松”时,做动作:格子写上E,内 部状态=“不轻松”,探头:移下一个。换成道指令:[第i个格子信息=H,内部状态=“很轻松”,探头在第i个格子]->( 第i个格子信息=E,内部状态=“不轻松”, 探头在第i+1个格子)(由于格子的编号i确定,i+1也确定,不用计算)所有的状态转换表都写成道指令后,再把所有的格子也如此处理一篇,那么道自动机 与图灵机将会完全一样动作。因此道自动机也是一种图灵机,如果图灵机能做的任何事,道自动机也能做。这两个是等价的计算模型。那么道自动机比图灵机有什么 好处呢?简单一点讲并行能力比较强。后面我将用道自动机来模拟元胞自动机。
内存cpu设计
前面我讲过有关内存cpu的事,因为前面主要是为了国人争口气,没有仔细阐述,因此可能产生一些误会。有一个网友Mphyatcd还在网上查找一番,发现stanford也有一个smart memories的研究项目,似乎跟我的这个想法有点像(http://www-vlsi.stanford.edu/papers/km_isca_00.pdf), 而且他对我的研究工作表示极大的支持,在此本人表示衷心的感谢!我对他收集的资料smart memories一文也认真阅读了一下,发现其实我的内存cpu与smart memories相差还是比较大的,所以也不用担心我们会有一些版权就纠纷了。那么现在我要把内存cpu仔细阐述一下,如有人有相似的研究,也可告知一 下,相信我们大家都可以坐下来互相探讨,希望为计算机的技术发展提供一个小小的推动。
大家都知道cpu工作时,其实要有一块组件来支持,即内存,没有这个 内存,cpu也是没用。内存如此重要,但人们对它不大重视,认为是无足轻重的东西。近年来,随着集成电路的发展,内存的价格和地位更是一落千丈,买内存就 像买大白菜。我因为以前对内存的研究下过苦工,就时常发感叹:“内存cpu要是早点加入我的研究结果就好了,地位甚至可以超过cpu了”,感叹归感叹,内 存的地位一直以来还是不如cpu。那么我们到底如何才能提高它的地位呢?就是要在内存上改造一下,就能使它的地位变得相当重要。我早就说过有的东西就像变 魔术,说出来就没意思了,可能还有人就更瞧不起了,这个内存cpu就是这样。但为了让大家对如何实现道cpu、道指令、道编程有所思路,我也就顾不得这些 俗人的东西了。
普通内存是一块有地址输入,然后输出(写入)数据结果的芯片,任何教科书都是这样写得,不知大家有没有看过高级的书,跟这个内存功能不一样 的设计方法,可以转告一下,否则又有人要骂人了。按书设计不是我的本行,还是请我们的受过高级教育的人来做,我要做得就是设计内存影子,一个死死跟在内存 数据上得影子,这个影子可以由地址在读数据时读出,地址要多加几位来寻址这些影子。这些影子主要有以下几个数据。1、对应的数据上的每个数据位结果,如 64位,有64位,每位一个数,共64个数。2、对数据分组产生的每组是否全1或0等结果。可以4位分组、8位分组、16位分组等等。3、其他一些对计算 有用的,数据位组合形式。 经过上述分组后每个数据就会产生比它自身还多的影子数据。 有的人就会不理解,你的内存存这么多的可以由数据本身计算出来的数据干什么,估计脑袋不正常了,败家子。其实要是讲究排场我们就可以这么做,要是不讲究排 场,要节约,就让cpu累死累活加班干吧,反正不用白不用。但是因为我比较仁慈,见cpu这么辛苦,还干这些低级活,就让内存去干吧,又可让内存增加本 领,又不至于失业,一举两得,和乐而不为。内存有了影子后,增加了不少本领,但它只能对数据自身进行影子化,这点东西在cpu也看不上眼。因此,我又在内 存上加了又一个影子,即其他数据的影子,这个其他数据的影子现在可以和数据及它本身的影子对话(逻辑运算),这样内存就可以对cpu说:“老大有什么活, 干不完的,老弟可以帮帮你“,不过这话可不能说,否则cpu以为内存要抢了它的饭碗,内存就不能好好过了。
内存经过这样的处理其实已经具备cpu的功能, 不过它还不能像cpu那样工作,必须有人为它设计指令、写程序。于是,出于人道的考虑,我因此花费数年时间,为这个可怜的内存设计了指令、程序,即道指 令、道程序。现在这个有点像cpu的打工仔终于有点像样的本领,从此再也不用低人一等,可以堂堂正正与cpu老大平齐平坐,享受高人一等的待遇了。内存 cpu就这么简单,简单的有的计算机知识的人就可以设计出来。
内存cpu非常简单的东西,我不知道intel、amd等是否是这样设计他们的嵌入式内存控制器,但我保证我们的技术专家们是不会这样设计的,因为 他们要设计高级的cpu,才没有时间来为这种抵挡内存cpu做设计,并且抵挡内存cpu设计出来也没有市场,外国人都要买高级的cpu,只有穷人才用这种 抵挡内存cpu。
道指令与多核并行
有人可能有这样的疑问:道与计算机显然不可能结合,即使道cpu设计出来,那么如何设计道程序的语言编译器,并且我的道cpu还没设计出来,所有这 一切还是空谈,所以我的想法应该是民科无疑。对于网上的种种猜测其实有的是事实,有的就不符合事实了。今天我要在这里重新澄清一下。
道cpu其实很简单, 上面我已经阐述过如何设计内存cpu,内存cpu已经非常接近可运作的道CPU模型,只是还必须增加一些控制组件,循环整个道指令及信息的控制组件,还有 处理函数调用和返回的控制组件,这样整个内存CPU就可作为道程序运行的硬件。可能有的人有疑问,如为何设计内存数据的影子,让cpu去计算出来,可能更 简单呀?其实内存数据的影子是为了充分利用内存的硬件便宜的特点,一些数据中的数据如果事先准备好再送到cpu去就可能省去cpu的计算时间。cpu中许 多指令就是用来判断数据的一些组合状态设计的,如移位、是否全0或1、取出其中一位或几位,这些由cpu执行也没错,但我觉得如果让他们事先就准备好可能 更有效率,至少达到同步执行的能力,在现在提倡并行的时代就更有效率了,只是要重新设计cpu指令了。
重新设计cpu指令有两种方法:一种在加长指令,另 一种重新设计几个内存cpu的操作指令让它与cpu共同运行,有点像协处理器的性质。按照直觉我选第二种方案,并在第二种方案尽量扩展使他像cpu那样方 便数学运算,即像前面说过的其他两种cpu方案。这三种扩展都是按照cpu顺序执行的思路去做,后来觉得现在cpu越来越复杂,大部分的硬件都在为增加有 限性能的并行多内核奋斗,而并行多内核没有软件支持却是一点也没有用的,因此就干脆让内存cpu每条指令并行运行,并行的控制权直接交给软件设计者,软件 设计者从此不用在关心并行指令、多内核如何协调运作,只要设计正确的程序就可以了。这样扩展后的内存cpu指令有点像带if的超长指令,整个指令由于if 的原因可以很长,但执行的功能却简单,甚至可以没有数学运算,要有数学运算必须为超长指令带上一个数学ALU也是可以的只不过会增加点成本。很多人不理解 道指令,但是应该理解带if的超长指令,因为if判断里有时很多参数要判断,我们直接把这些参数设计在一条指令里,即如普通cpu将用很多条指令组合起来 才能实现一条道指令。为何这样做,所有的努力都是为了全并行的指令,我们把并行的条件都写在了指令上了,这样cpu开发人员就不必为如何并行、多核想破脑 袋了。
说了这么多,那么这个内存cpu能否满足道指令、道程序运行需要,我现在也不知道,因为我不是硬件设计人员,我也没有条件去实现这个内存cpu,虽 然这个内存cpu利用的硬件随手拿来,主要是目前工作不允许。不过,虽然硬件上不能达到目的,本人利用数据库相对容易设计的特点,设计了在数据库可运行的 内存cpu模拟系统,即道cpu模拟系统,我在数据库上设置一些库表当作内存,比如道指令表、待信息表、信息生成表、赋值表(=、函数调用、函数返回)、 函数调用栈等,再写上个一直循环的存储过程就可模拟整个道cpu的运作,基本上不用写多少代码。这个模拟系统本人早就设计出来了,所以对网上的一些评论, 始终不为所动,一直想把我的设计思路一点一点阐述出来,这样大家对cpu的设计就不会感到很难了。
模拟cpu设计出来后,就要设计合适的可编程的指令来运 行程序。因为网上天天吵着中文cpu、中文编程语言、汉编、中文系统等,却没有一个真正有含量的东西出来,所以就把内存cpu指令设计成道指令的形式,杜 绝任何有关计算机语言关键字的弊端。其实大家肯定没有仔细研究领会道指令,而且我在前面的文章里也已经故意透露道指令的数学依据,但没有人有点表示。现在 再说一下,其实它是布尔逻辑的另一种表示,如果有人要是写出一个布尔逻辑等式而道指令不能表示的,我就信服口服了。大家想想如果道指令都能表示所有的布尔 逻辑等式,那么还有基于布尔逻辑的计算机道指令不能设计出来的么!其实我这样说,肯定还有人不明白,因为他把布尔逻辑当成0和1的等式,所以死活也不能理 解道指令,就像国人死活说计算机基于数学“进制”设计出来的。按我的做法,计算机不需要任何数学理论,什么“大小、加减法、乘除、代数”统统不要了,只要 一个如何判断两个符号是不是一样的东西就足够了,这个简单说就是比较功能(图灵机也需要这个最基本的功能)。
我们经常说,物以类聚,人以群分,只要东西有 了分类,只要能够判断出他的类性就可以了。在数学上就是在一个集合里,赋予每个集合元素各种属性(关系),这样就能在集合里找到相同属性的子集,任何集合 元素都属于其中一个子集,那么这个集合的元素加上道指令就可以用来编程了(集合有关属性(关系)的具体理论请参考《拓扑学》)。这样做比图灵机还少了机械 机构,完全像数学定理推理过程,一个等式蕴含一个结果,一条道指令也蕴含(生)一个结果。基于布尔逻辑之上的道指令完全可用来数学推理,这个大家可以想想 如何做到。我以后将会结合一些人工智能探讨如何让道指令模拟人类思维。
道指令与云计算
近年来,“云计算”这个概念盛行起来了。在百度上搜索一下,找到它的定义:
1、狭义云计算
狭义云计算是指IT基础设施的交付和使用模式,指通过网络以按需、易扩展的方式获得所需的资源(硬件、平台、软件)。提供资源的网络被称为“云”。 “云”中的资源在使用者看来是可以无限扩展的,并且可以随时获取,按需使用,随时扩展,按使用付费。这种特性经常被称为像水电一样使用IT基础设施。
2、广义云计算
广义云计算是指服务的交付和使用模式,指通过网络以按需、易扩展的方式获得所需的服务。这种服务可以是IT和软件、互联网相关的,也可以是任意其他 的服务。云计算是并行计算(Parallel Computing)、分布式计算(Distributed Computing)和网格计算(Grid Computing)的发展,或者说是这些计算机科学概念的商业实现。云计算是虚拟化(Virtualization)、效用计算(Utility Computing)、IaaS(基础设施即服务)、PaaS(平台即服务)、SaaS(软件即服务)等概念混合演进并跃升的结果。
搜索其它网站的定义,也是各有各的意思,我不知道我们这些IT人士对这些定义会有何感想,反正我是一头雾水,比我写道指令还厉害。我估计这个云计算 当年也是个民科,就像中国中医、易经的研究者们的口气,简直要无所不包了。云计算这个概念盛行再次验证了中国对各种外来概念的追捧,现在国内大公司已经完 全领会贯通云计算这个概念,并迅速把这个概念迅速普及开来。所有的与网络有关的应用都搭上云计算这个快车,准备再次忽悠一下中国云计算客户。
抛开这些概念,如何去看清当清云计算的本质呢!以google为例,google当年凭着搜索技术迅速走红,成为执手可热的公司,并且以后也推出了 一系列各种网络应用(Gmail、Maps、Docs等),准备再次走红。看到搜索技术如此迅猛,中国的公司也不甘寂寞,迅速把搜索技术普及到中国的千家 万户,特别我们搞科研的更离不开了。言归正传,现在Google看到云计算这个更高深的名称更容易让人迷糊,就忙着把它们的那些网络应用(Gmail、 Maps、Docs等)迅速包装起来,美其名曰:云计算。IBM、微软、雅虎等看到这么好的名称要被Google独占了,也赶快提出了与“云”有关的名 称,中国的公司也迅速动作起来。说了这么多,大家不知有没有看出来,这些名称、概念等其实与技术没有大的关联,一项技术你可以用任何名称来包装,用个咱老 百姓不知所云的就是高科技。本人为了不忽悠咱老百姓用“道”来令名信息cpu、信息指令、信息编程就是这个苦衷,否则我可以用云cpu、云指令、云编程来 令名,那样咱老百姓就不知所“云”了,一项世界级的高科技又诞生了,又可以从国家那里骗点科研经费,何乐而不为呢。
虽然云计算带有卖概念的嫌疑,但按照咱的理解,云计算还是有点技术含量的,就是这个“云”字如何从技术上真正地扩展。“云”字面上理解就是飘来忽 去、极其自由,而计算技术要做到飘来忽去、极其自由就不能靠添置大量的服务器来扩展。现有的云计算不能做到“云”究其原因:1、各种云计算要编程就要有各 种的计算机语言;2、各种云计算的系统也是各种操作系统平台组成的;3、各种云计算的cpu也要由各种cpu充当;4、各种云计算所依赖的平台也是由各种 现有的平台构成,如Java、.net等。那么如何做到飘来忽去、极其自由就是要有本人所提倡的信息指令、信息编程(暂时不要用道),原因:1、信息指令 因为只有一条指令,容易学习,就是没有读过书的人也可以用,解决目前中文编程语言不足及计算机教育普及不广的问题;2、信息指令可以把它存储在任何地方 (数据库、文件、XML等),由任何信息cpu(包括模拟的信息cpu)调用执行,就是一次编程到处运行,比JAVA还JAVA;3、信息指令中的信息可 以设计成带网络地址、信息树类别、信息树编号、信息树分支等信息表示方式,这样就能够轻而易举地解决云计算中信息调用的各种弊端,比.net还.net。
信息技术的发展日新月异,新东西层出不穷,造化留给我们两个选择:继续使用国外云计算带来的复杂信息世界或用我们自主的信息指令来构造我们的信息世界,仅以鲁迅的话:“造化又常常为庸人设计,以时间的流驶,来洗涤旧迹”来与志同道合者共勉。
道指令与布尔逻辑
我在前面说过道cpu、道指令、道编程的理论根源,估计大家都忘了,因为这几天我的文章很少再提,担心大家把我当成从道观里出来的骗子,但现在不得不再提 这些今人已遗忘的老祖宗的旧东西。我引用了《道德经》里的一句话,很多人不屑于故,有股“凡是古人的都是糟粕,凡是中国人的都是瞎谈”的第六感,看了一眼 就必生反感。这几天,刚好没事,在网上搜索一顿,果然老祖宗的旧东西被今人当作招牌拿出来招摇撞骗还不少,有从《易经》里“阴阳五行”(不知道《易经》有 没有阴阳五行)悟出各种适合宇宙万能定理的,有从《易经》里“八卦、太极、两仪”悟出全能的计算机的,二进制更不用说了等等如此这般的现象也实在太多了。 我不知道到底是国人只受过古典教育还是现代教育太失败了,竟然把堂堂的现代科技非要用古人的东西来套用。我们的专家教授也是实在不行,你早早利用现代科技 多搞一些比外国人先进的东西出来,让国人有引以为好的东西阿Q一下,省的老拿老祖宗那点东西出来炫耀,让外国人见笑。
今天,因日常不爱看现代国人写的书,又不屑于套用外国人的高深的理论,只好又一次拿老祖宗的旧东西来用一下。春秋战国《道德经》是一本高度概括的哲学书, 讲述了很多有哲理的古人的话,春秋战国大家都知道是一个诸侯混战的年代,就像目前诸企业混战的时代,老子毕生目睹这些不幸生于那时代的人有违自然的神谕, 就用把自然的神谕写在《道德经》里以示后来人。我等不幸生于企业混战的时代,应多读读《道德经》,与老子共勉。言归正传,《道德经》言人与诸侯即言个体与 整体之间的和谐之道,个体与整体之间也即微观与宏观、单核与多核、串行与并行等之间的有序和谐共处。
“道生一,一生二,二生三,三生万物”讲述了宇宙间万物的发展规律,引伸到信息领域就是信息的生成规律,即“道”作为万物信息生成的源程序,“道生一”即 信息万物程序开始运行,产生最原始信息,如宇宙大爆炸的原始点,“一生二”即由原始信息产生基本信息,如宇宙大爆炸后的粒子,“二生三”既由基本信息产生 基本信息之间的(阴阳)关系,如宇宙大爆炸后的粒子的反应关系,“三生万物”即由基本信息及其基本信息之间的关系产生万物各种信息,如宇宙各种粒子之间产 生各种反应产生各种原子,由原子反应产生各种分子等,整个过程表现为信息树的发展形式。信息的生成以此环环相扣的形式发展着,推动它发展的动力是什么? 《道德经》也给我们指出了答案:“万物负阴而抱阳,冲气以为和”,万物的发展即信息的生成是在“阴、阳”两种不同属性的信息关系组混合作用下,重新生成一 种新的信息,即各种物体和他们之间的各种反应关系产生新的物体(为了大家理解稍微修改一下)。
信息生成信息比较好理解,就是信息之间的关系是怎样的,各有各得说法,如国人用“八卦、五行”等理解,外国人用“逻辑、布尔逻辑、数学运算”等,我的理解就是“阴阳”与“布尔逻辑”是一样的,即道指令:[原信息1, 原信息2, 原信息3…]…< 原信息6, 原信息7, 原信息8…>…..->生成信息。其实是布尔逻辑的另一种表示。我在前面已经说了很多次了,不知有人理解吗?现在我必须详细解释一下这个理论,否则,我这个民科帽子不知啥时候能够摘掉。
道指令用布尔逻辑表示:
[原信息1, 原信息2, 原信息3…]…< 原信息6, 原信息7, 原信息8…>…..->生成信息。
((ABC..)∪(…..) ∪…)∩!(EFG…) ∩!(…) ∩…=Q
以上用ABC…等表示原信息1、原信息2、…。
各种布尔逻辑的等式可用上述的几个等式写出来,所以基于布尔逻辑的现代计算机可用道指令制造出来,可运行道指令的到cpu也可以模拟现代计算机cpu处理数字信息的过程,具体实现过程现在不讨论。
我这样证明不知有人有疑义吗?可能有人说你这样做还不如直接用布尔逻辑构造cpu,又有很多工具可用,又能让受过现代科技教育的人理解,何乐而不为呢!其 实我这样做的原因是因为用布尔逻辑来设计cpu、cpu再处理数字信息这个过程太麻烦,布尔逻辑粒度太小,我把布尔逻辑做成较大粒度的元件(道cpu), 再用这个元件处理信息,省去了设计cpu繁琐的过程。
我不知道cpu的两大巨头将来如何发展它们的cpu,但GPU的发展可能给了他们这样的提示,全功能的cpu越来越难于设计,中等粒度的cpu将是未来 cpu的出路。在这混乱的时代,我奉劝cpu的设计者们、软件开发者们、企业管理家们、企业主们多多读读《道德经》。《道德经》可能不能带给他们生财之 道,但可以给他们带来串行与并行、单核与多核、个人与企业、微观与宏观的有序和谐之道。
临时性道指令
按照上述信息处理理论,信息又可以分为自动产生和不可自动产生的类型。自动产生就是通过一些列的数学、逻辑等运算就可以产生出新的信息,而不可自动产生就是不能通过数学、逻辑等运算产生的信息。当道函数内有很多这种不可自动产生的信息时,道函数实例就会一直等待这些未决的信息,道函数不能通过自身产生这些信息,所以他必须等待外界的输入信息。而外界对一个道函数输入信息主要有两种方式,第一、直接通过道函数的实例ID输入;第二、道函数产生一个多种选择的可能信息系列,由外界随机挑选输入。
有人可能对这两种方式很不理解,这里稍微解释一下:当前的计算机程序,大部分是确定性过程,比如一个函数可以从头运行到结束,不管什么情况,结果都一样。那么,程序如何处理不确定性的过程,关键在于函数必须可以跨出自身对不属于自身的信息进行调用,一般的实现就是利用全局数据,全局数据的变化或改变就可以影响函数的运行结果。除了使用全局函数外可以调用另外一个非确定性函数,获得一个关键数据后,函数再决定运行流程,归根结底,也必须有一个非确定性的过程。还有一种最原始解决方式,即调用一个随机过程,取得随机数据,再来决定运行流程。然而目前随机的解决方式,实际上也是调用了一些全局数据,所以我们上述几个解决方式归纳为一个解决方法,即利用全局数据的变化来决定函数的非确定性运行过程。函数穿过自身作用范围调用全局数据,听起来很诡异,比如把整个宇宙比喻成一个函数,宇宙的量子不可测行为及不可理解暗物质现象就会产生如函数调用全局数据的诡异行为出来。虽然函数调用全局数据可以诡异般地做出非确定的行为来,然而计算机高级语言专家告诉我们,这并不是一种好的行为方式,并且是造成软件项目失败的一种方式。如何较好地解决函数的非确定行为就是道指令及现代计算机语言必须解决的问题。
现代计算机语言解决非确定函数问题的除上述外方法并不多,目前大多利用事件功能,即函数停下来等待一个事件,再决定运行流程,如windows中的事件消息,C#的yield关键字,这些解决方法虽然提高效率但大都不如全局数据来的直观,所以本文的道指令稍微改造全局数据的表现形式,结合事件的方式,提出一种较好的解决方法,即函数不是主动去读全局数据,而是被动地改变函数内部数据。
这里再稍微解释一下,函数内部数据一般别的函数是不能改变的,一般由自身才能改变。再以宇宙来举一个例子,多重宇宙就像多个函数,多重宇宙间互相交流能量,就会表现出很多诡异特性,比如,粒子的有无相生,能量的无中生有等,从一个宇宙中向另外一个宇宙抛入一个光子,在另外一个宇宙就会突然产生一个光子,或为保持能量守恒,这个宇宙就会向原宇宙抛回一个光子,处在宇宙当中的人就会被这些诡异的特性迷惑,不得不发展很多科学理论来解释这些现象。
既然要改变函数的内部数据,就必须获得每个函数实例化ID,本文采取以下道函数表达式:
函数名([Xthis.dfdf,sdfsd,…]<adfd,sdfsd,…>)->Xthis.fdsa=’sfgfsg’。
Xthis:表示未知的函数实例ID。
函数名(…)内部的道指令表示满足该道指令的“函数名”函数实例ID,如果该实例ID存在,就运行->后的等式。
也可以这样理解,道指令运行在两种情况,一种当前已知的函数内,一种临时性加入的已运行的函数实例内。第二种情况非常难以理解,举一个例子,如有十个人,不知个人品行,我们就临时编出一条道指令:人的道德([Xthis.强奸女性])-> Xthis.自杀,并把这条道指令如魔鬼般临时植入这十个人里,这十个人内部就会按照道指令列出的条件产生出一个虚拟结果,指示某人已满足条件,并运行“->”后的指示,这样世界就太平了。
临时性道指令为当前运行的函数加入临时性指令,对函数的内部数据进行修改,使得函数可以变现出非确定的行为。
抉择形与自学习形道指令
道cpu、道指令企图用最简单的、最基本的原理构造出现代先进的、包容一切的计算机技术。这种技术有别于当今流行的计算机技术,它最重要的特性在于利用几千年前古中国《道德经》记载的“有无”、“阴阳”等宇宙最基本的计算模型构造出仅有一条指令的计算体系。《道德经》揭示了宇宙间最强大的最基本、最强大力量就是“无”、“弱”、“寡”,如“上善若水”、“有生于无”等,道cpu、道指令正是从此原理出发,运用一条指令来创造计算世界。在以前的文章中,本人已经对尽有一条指令的道cpu、道指令理论进行了详细的论述,相信所有受过高等教育的人都能够领悟,能够应用此指令进行软件开发编程,编制出所需的软件来。但这不是道cpu、道指令的主要目的,在前面的文章中,本人已稍微透露了这个最高目标境界,既用道cpu、道指令开发出既有人类智能的软件来。
人类智能或叫人工智能很早就有了,支持人工智能推理运算的计算机语言Prolog也很早就被开发出来,但到目前为止真正的具有类似人类智能的人工智能还没有看到,2009年,科学家们已经发明了一种自学习的软件用来帮助化学实验,还有一种神经网络可以达到几岁小孩智能也被发明出来,基因技术方面也将达到制造人工生命的初步阶段,这说明了真正的人工智能有可能在这几年内取得突破。在这智能即将突破的关键时期,许多先知先觉的企业都在密谋能够在将来分得一席之地,搜索技术公司Google及数学软件公司Wolfram多年前已在秘密开发出能够回答人类问题需求的系统来,我国的baidu也在2009年赶忙学习这个重要技术方法,并提出所谓的框技术来,而这个时候大多的企业甚至大企业正在忙于把手中的软件转变为云技术,对未来的趋势毫无知觉。
Google及Wolfram浸淫于多年的信息数据算法研究,对未来信息的趋势看的非常清楚:智能才是信息发展的本质,如何智能处理信息是当今软件行业发展的生死攸关的时刻。在软件发展的早期,大半部分软件是开发如何使用机器的软件,而现在就必须开发如何处理信息的软件,机器的重要性已经减化,这时候如不能把握发展信息的关键时刻,以后必将在信息化方面处处依赖它人,信息化生活就会时刻受到别人的控制。没有掌握智能处理信息的关键技术,想在未来信息化行业挣得一席之地就无从谈起了。
对智能处理信息这个问题很多的专家学者在几年前就已经提倡,这就是我们倡导的信息化社会或数字化生活,然而这几年我们在信息化的过程中走了很多弯路,至今也没有看到目标。信息化从上世纪的90年开始提倡,如办公自动化,到现在的协同、云计算技术等都是在为信息化努力,但却没有取得很好的效果,国内众多软件公司到现在也没有提出一个很好的解决方案来。时间不等人,国外已经发展出了初具人脑智能的软件,我们还在为采取何种编程语言、平台、工具争吵,还在观望,等Google、Wolfram等国外的公司发展出了真正的智能信息化技术来,我们再来模仿就来不及了,原因:未来的云计算技术会变成信息脑,对信息既有超强控制的脑,利用领先的时间充分优化脑智力,从而在处理信息上处处领先。按照本人预想,这种信息脑根本不用任何人工干预,自发编程,能像人类巫师(智者)般回答各种有用问题,可跟《黑客帝国》、《鹰眼》的主机媲美。
信息脑的关键技术就是要有跟人脑神经元之间的自发连接一样的自发编程技术,能够对采集到的信息进行自发编程,不再需要人类人工编程干预。在智能发展的早期,如神经系统刚出现时,可能一条、几条、几百条的神经系统,神经自组织(自发链接)功能就出现,这种自组织以极简单的形式形成智能。而人类为了数学计算的需要,开发了规模庞大的语言、处理器,而处理智能却比不上一条神经元。一条神经元可以与人类耗费精力设计出来的计算机系统媲美,完全依靠他的自发行为(自组织),也可以这样理解:生物有了一个神经元后,就可以产生第二个神经元…. 至无穷,这些神经元之间就可以相互作用,导致更多的相互作用发生…至无穷,最后智力就产生了。按照《道德经》的话就是:“道生一、一生二、二生三、三生万物”。神经元自发行为根本没有人来控制,没有人来为他们制定行为规则,这启示我们,要让未来信息脑技术成功发展成为有智能的整体就必须让信息自发产生作用,再产生更多的相互作用,最后形成智能体。前面说过信息之间作用形式可依据神经作用原理抽象为道指令的形式,我们可根据信息树形成的理论,为信息作用开发出道指令程序来,这样一来,就不能达到信息自发产生作用的目的,最终还要靠人类来运作,解决此问题的唯一的希望只有开发具有自发编程的道指令。
神经系统以及其简单的功能结构产生智能,具有自发编程功能的计算机语言也根本不需要复杂语言关键字、复杂的数据结构、复杂功能等,只要具有自发编程功能就可以了,中文(英文)关键字、复杂的功能都是次要的东西。道曰:“天下万物生於有,有生於无”,宇宙中一切事物事物都是从“无”中生出来的,宇宙发展始于“无”,宇宙粒子从“无中生有”,复杂现象的最高代表—智能也是从一个非常简单的神经元开始的,人类模拟智能从最简单方式的开始,即从道指令开始智能的第一步。道指令仅有一条指令、没有任何关键字,没有数学计算、没有程序结构、甚至没有专用cpu,这正是智能设计在编程语言上的最终要求。有了智能设计专用语言(道指令语言后)后,我们就可以着手开始智能编程的第一步:自发编程。
从神经科学及基因科学的角度上看,智能依赖于神经元之间的简单自发相互作用,自发编程依赖信息之间的自发作用。按照道cpu、道指令理论,信息之间的自发作用就是设计具有自发编程功能的道指令。很早在以前龙芯论坛上,本人针对道指令的未来提出了构想:计算发展的尽头就是没有计算;cpu发展的尽头就是没有cpu;计算机语言发展的尽头就是没有语言;软件编程发展的尽头就是没有编程。道cpu、道指令的设计就已经基本上取消了计算、cpu、语言,剩下最后的目标,即没有编程。没有编程不是说从此不要任何编程行为,回到原始的靠天吃饭的社会,而是要让编程行为称为一种脱离人类控制的自发行为,没有了人类控制的编程,简单说就是没有编程。
自发编程为人工智能的未来提出了一个可能的方向,按照自发编程的原理,极度具有控制欲的人类设计出来的人工智能是不符合自发编程原理的,下文将按照自发编程原理设计出可以编程人工智能的道指令来。
为实现道指令的自发编程功能,必须对道指令进行一些语法改造。
第一:增加原因事件抉择,采用如下的方式表示:
[:杂事1,杂事2,杂事3,杂事4,杂事5:]
表示当结果有事件发生时,这些“杂事”事件是造成结果事件的可能的罪魁祸首。
<:杂事1,杂事2,杂事3,杂事4,杂事5:>
表示当结果没有事件发生时,这些“杂事”事件是造成结果事件不发生的可能的罪魁祸首。
[:…:]及<:…:>表示任意的事件集。
第二:增加结果事件抉择,采用如下的方式表示:
->[:杂事1,杂事2,杂事3,杂事4,杂事5:]
表示结果事件肯定在上面“杂事”事件中,让人类或自然为我们选择其一事件做为结果事件。
[:…:]表示可以生成的任意结果集。第三:增加道指令的输出抉择功能,采用如下的方式表示:-><:杂事1,杂事2,杂事3,杂事4,杂事5:>;表示对外输出结果事件肯定在上面“杂事”事件中,让人类或自然为我们选择其一事件做为输出结果事件。第四:增加道指令的自发编程行为,采用如下的方式表示:
增加另一中道指令运行标志“=>”,表示当有抉择形事件时,自发地把结果作为道指令加入函数中。
“=>”的运行功能与人类的记忆功能类似,可以把发生的各种事情前因后果存入记忆库中,并且记忆库中的各种事件规则对人类的决策起着重要的作用。如果推理是对记忆进行搜索匹配事件后得到假设的前因后果,人类再按照前因后果的指示进行抉择,选出本身认为最优的事件来,那么人类智能可以用道函数来虚拟运行,人类大脑时刻在建立临时性道函数,得出各种事件结果后再进行抉择。
道指令实现自发编程的语法十分的简单,与目前人工智能科学理论体系十分不同,但能够实现自我学习的人工智能。现在我们利用上述的道指令进行人工智能的编程:
自发的人工智能道指令程序[:…:]<:…:>=> [:…:]<:…:>;上述具有自发编程能力的道指令程序只有短短的一行,能够实现道指令的自发编程能力,具体如何做到这一点,我将在以后的文章再论述。
第一道道指令程序注释
道cpu模拟器、道指令编译程序已经初步完成,但还有很多工作要做。在更深入地开发之前,首先编写一道计算机递归程序,在此基础上加以解释,让更多的人了解道cpu、道指令如何工作,并提出有用的建议。
hhhyyyy
{
main()()
{
[dgdfg]->f(10)(ttttt);
[ttttt]->[ttttt,显示结果,结束];
}
f(n)(result)
{
[n=1]-><1>;
[n]<n=1>->$oldn=n;
[n]<n=1>->f(n-1)(fresult);
[fresult]-><oldn*fresult>;
[fresult]->[~oldn,~this,~oldthis];
}
}
上述f函数是计算阶乘10!的递归函数,以下讲解程序如何运行:
// 道指令程序包含许多函数,这些函数定义在一个较大的程序空间。
//首先程序空间hhhyyyy
hhhyyyy
{
/*像c语言一样,声明一个主函数,便于用户调用,如果是私用的程序,主函数便可以随便令名。*/
main()()
{
[dgdfg]->f(10)(ttttt);
/* dgdfg符号是函数开始符号,这个符号必须由函数输入参数传入,或在主函数中由用户直接传入,[dgdfg]表示dgdfg符号存在时,便激发“->”后的生成指令,f函数就可以执行调用了,调用后dgdfg符号就丢弃了。当f(n)( result)函数调用完成后,result 的值赋给ttttt ,ttttt可以使用了*/
[ttttt]->[ttttt,显示结果,结束];
/*[ttttt,显示结果,结束]表示同时生成三个符号,其中已有的ttttt符号保留原值,其他的符号为空值 */
}
f(n)(result)
{
[n=1]-><1>;
//表示当n=1时,返回1给result。”->”后的”<>”符号是返回标志
[n]<n=1>->$oldn=n;
/* 表示当n!=1时, 把n符号值赋给oldn符号,$表示保留oldn符号在数据栈中直到函数完全结束。*/
[n]<n=1>->f(n-1)(fresult);
/* 表示当n!=1时, 调用f函数。*/
[fresult]-><oldn*fresult>;//函数返回oldn*fresult值。
[fresult]->[~oldn,~this,~oldthis];
/*[~oldn,~this,~oldthis]表示从数据栈中丢弃三个符号,该函数从调用栈中清除。*/
}
}
从上述道指令的编程中可以看出,目前,道指令语言仅有几个标号:
比较功能标号:=
赋值标号:=
道指令 :[…]…<…>…->[…]
符号存储指示:$、~
函数调用:prog.functcall(….)(….)
函数返回:[…]…<…>…-> <…….>;
道指令语言编程的关键在于,必须控制符号在数据栈中的存在,道指令根据符号在存在运行生成结果。理解符号的存在,也就理解道指令的本质。