并行程序表征和模型问题是计算机领域的核心论题。当前,基于串行理论(serial theory)的计算机技术似乎已经走到尽头,无论硬件还是程序软件的发展,都出现某种程度的停滞。而并行理论(Concurrent/Parallel theory)成了计算能力得以突破的重要途径。尤其是在程序设计领域,发挥着主要作用的串行程序设计编程技术,其局限性随着网络技术和大规模计算的发展日益凸显。因此,发展并行程序成为解决串行理论各类困境的有效途径,而表征是解决并行理论发展瓶颈的前提。在这一方面,当代主流的并行理论Ada语言、Occam语言、Petri网等的表征特征明显呈现出以语用化解决语义问题的发展趋势。此外,对计算机模型思想而言,大数据时代颠覆了人们对传统的确定性以及不确定性理论的理解,一种基于形式语言和逻辑之不确定性的计算机模型思想亟待
形成,本节第二部分正是在讨论并行程序不确定性难题的基础上,把问题论域扩展至计算机模型的整体特征方面,尝试以大数据思维重塑该问题的理论面貌。
(一)并行程序表征的语义发展趋势
对于程序设计而言,表征和计算从不同侧面刻画了程序可以实现的智能功能。就像计算机必须基于二进制这种表征方式去设计计算方式一样,程序设计中的计算方式也必须基于特定表征方式之上。也就是说,表征方式决定了可以采取的计算方式。在并行程序中,基于不同表征方式的软件决定了该种软件可以实现的特定功能。研究并行程序的表征方式及其发展趋势,是并行程序设计发展的关键所在。
1.并行程序表征问题产生的原因
随着人工智能、操作系统、语言开发、编译技术、通信技术、大规模数据库、多处理机等应用技术的发展,并行处理的重要性日益显现出来。当前,并行处理主要纠结于算法问题,用并行语言作为描述手段,同时受到软硬件及通信环境的制约。因此,并行程序设计中的首要要务,不仅仅是程序设计本身,还需要多层次全面考虑。尤其是并行程序的表征问题,其重要性随着并行程序的广泛应用而逐渐凸显出来。
并行程序的发展受到两个方面的驱动:一方面是计算机硬件技术的发展;另一方面是计算机软件的发展。
(1)计算机硬件
早期计算机是串行的。随着现代计算机技术的发展,在不同程度上都具有了并行性。当前的计算机主要分为单中央处理器和多核处理器两种。随着大规模计算和网络发展的需求,多核处理器成为应用的主流。
然而,单个CPU上晶体管集成技术的发展逐步背离摩尔定律而趋近极限,依靠增加晶体管数目来提升CPU性能变得不可行,而主频之路似乎也已经走到了拐点。处理器的主频在2002年达到3GHz之后,就没有看到4GHz处理器的出现,因为处理器产生的热量很快就会超过太阳表面。这表明电压和发热量,成为提高单核芯片速度的最主要障碍。人们已无法再通过简单提升时钟频率就设计出下一代的新CPU。
在主频之路走到尽头之后,人们希望摩尔定律可以继续有效。在提升处理器性能上,最具实际意义的方式,便是增加CPU内核的数量,即研发多内核处理器。多核处理器的开发,实际上采取的是“横向扩展”的方法去提高性能,CPU的更新换代将具有更多的内核。人们希望将来的中央处理器可以拥有几百个内核。然而,每一个内核的计算能力将不会比之前的内核有本质上的提高。
多核处理器的实现,从根本上讲,还得依靠具有多个可以在系统中共享存储器的情况下,独自运行各自程序的分离的子处理器。多核处理器与多CPU之间的本质区别在于,前者在缓存中实现数据共享,而后者在主存中实现数据共享。缓存级的数据共享大大缩短了资源竞争所浪费的时间,改进了主存级数据共享的那种资源竞争时间,远远多于程序运行时间的问题。
对于并行软件设计而言,硬件的并行结构决定了编译程序的表征形式,而算法体现出的并行度与基于硬件的表征形式越一致,并行程序的处理效率就会越高。也就是说,并行程序设计的并行度,必须与相应的硬件结构相一致。未来多核处理器这种并行硬件结构,给未来软件编程提出了新的要求。“未来的程序如果要利用未来CPU的计算能力,它们将不得不并行地运行,并且程序语言系统也将不得不为此而发生改变”①。
然而,并行计算机的硬件结构并没有形成一个相对统一的模型。不像串行计算机拥有冯·诺伊曼结构,并行计算机的拓扑结构、耦合程度、计算模型等都不确定。因此,要发展与硬件结构相一致的并行程序将非常困难。
目前,并行程序主要应用于基于单处理机的多种并行措施的并行处理系统,以及基于多处理机的不同耦合度的多指令流多数据流计算机系统。人们从不同的层次采取不同的措施来实现并行计算,这表明并行程序的发展还很不成熟。
(2)计算机软件
并行软件从抽象层次上大致可分为两个领域:用于操控和协调并行系统各软、硬件资源的系统软件和针对各应用领域开发的各种软件工具和应用软件包。由于短期内很难在硬件方面取得质的突破,按照当前的技术水平,从硬件角度构建并行处理结构并不存在困难,真正的困难在于并行程序的软件方面。在串行系统中,由于串行程序的好坏导致的速度差至多不超过10倍,而并行系统中,由于并行程序设计差异而导致的速度差可以达到近百倍。并行软件开发应用的滞后,没有相对成熟的理论成果,使得并行计算机系统硬件性能的大幅提升没有多少实际意义。无论是大规模并行处理机还是多核处理器,没有相应并行程序的支持,是这些系统性能难以充分发挥的根本原因。
随着大规模并行处理机和网络的发展,对于程序并行度的要求不断提高。与串行程序不同的是,并行程序不仅要考虑并行算法本身,还要考虑相应的并行计算机数量及其拓扑结构。由于并行程序的根本特征在于多线程的并发执行,能否充分利用共享资源、实现通信优化、减少程序中的不确定性、逻辑错误和死锁等问题,就成了并行程序设计中必须面临的难题。由于并行性自下而上涉及硬件层、操作系统层、通信层以及应用层等多个层次,①而并行程序设计作为计算机硬件和软件之间的桥梁,实现了从硬件实现到高层软件之间的转换功能。这种转换更多涉及的是通信层和应用层。理论上,CPU的数量与计算速度成正比,由此涉及的多CPU之间的通信问题比具体的算法步骤更为重要。因此,并行程序设计首先需要考虑的是模型问题,合理的结构安排不仅决定了程序开发的难易程度,并直接关涉到并行性所带来的加速比。
并行程序设计主要采用数据并行和功能并行的方式。数据并行可以采用隐式或显式的说明语句来表征数据结构的分解,程序高度一致,用户不需要管理各进程之间的通信和同步问题,也较为容易获得好的并行度。但由于这种方式的通用性相对较差,难以表征需要并构处理的任务。而功能并行的各子任务之间通过显式方式来协调,进程间的同步和通信也是显式的。这对程序设计人员的要求非常高。一旦程序的结构划分不合理,就会产生通信时延甚至通信拥堵,从而无法发挥并行程序应有的速度优势。实际运用中,人们最容易忽略的问题就是共享数据,这会使程序运行很快陷入困境。而减小数据共享范围以及采用显式方法,可以在一定程度上规避这个问题。
当前并行程序设计中的主要问题有:
其一,串行程序并行化的问题。
现有软件大都是串行程序,其应用已相当广泛,并行机上需要大量用到已有的串行程序。因此,存在于应用领域的大部分并行程序,都是利用适当的算法把串行程序转换而来的。人们希望设计相应的编译程序,可以在不对现有程序做改动的情况下,由编译系统自动完成串行程序的并行化。这是一种隐式的并行策略,在编译系统层面实现程序表征和计算的并行性。然而,现有的算法难以有效处理如此复杂的应用需求。并且,这种并行程序生成方式难以摆脱串行思维的制约,实现最优的并行性。所以,该方法难以适应现代并行计算机硬件发展的需求。
这类软件中,FORTRAN语言①最具代表性。它利用智能编译程序,在原有的顺序程序中挖掘并行性,并自动将其转换为并行程序代码。问题是,这类程序要求程序员用串行软件编写并行程序,而智能编译程序的智能程度相对较低,在遇到复杂程序时常常难以有效发掘出程序的并行性,这使得这类软件的并行效果常常不尽如人意。
其二,扩充串行语言的问题。
这种方案利用在现有的串行语言中增加库函数,来实现并行进程的功能,“在语法上增加新的数据类型及相关操作,扩大描述问题的范围;在语义上扩展原操作符、操作对象范围和表达式语句的含义”②。这种功能的扩充需要同时引进同步通信机制,用于表征语句操作步骤间的并行性。③例如,可以用FORK和JOIN语句来实现,这也是开发动态并行性的一般方法。FORK用于派生一个子进程,而JOIN则强制父进程等待子进程。这种方式的问题在于程序的可移植性很差。当其运行的计算机结构发生改变时,就必须重新编程。常见的有Ada语言。④
其三,根据并行任务的性质直接设计并行算法的问题。
这是一种显式的并行策略。通过设计一种全新的并行程序语言,尤其是数千个线程的高并发软件,直接根据并行任务的性质去设计程序结构。众多线程通过共享内存等进程级的资源,以更为密集的方式改进了进程间粗粒度的运行手段,大大提高了运行效率。这里最为核心的问题就是,如何将并行程序分解到大小合适的粒度,真正让多个线程在多核系统中并发地执行。要合理控制线程之间的数据共享,因为这会造成两个线程不断进行互斥修改,产生更多的信息交换,这将大大增加软件层面的复杂度从而降低并行程序的运行效率。
计算机硬件的发展速度远远快于编程软件,快速增长的CPU数目对于并行程序而言是最大的挑战。当前,大多数并行程序在同时处理几十个线程的情况下尚能正常运行,但通常对于上百个线程的并行任务便应付不来。为了解决阻塞问题,人们尝试表征在硬件层次上的原子操作,直接从硬件中挖掘并发性,从而可以更好地体现并发硬件的特性。
此外,多线程需要正确的存储模型。强存储模型和弱存储模型对于线程数据的读取方式影响很大,直接影响到数据读取的正确性。为了得到正确的语义,必须设置相关属性。否则,当程序从强存储模型移植到弱存储模型中时,就很可能会产生错误的运算结果。在这方面,Java做了有益的尝试。
由于受到特定并行计算机以及网络服务器的制约,这类并行程序语言通常每一种只能用于一种类型的并行计算,通用性较差。并且,这种编程方式对于并发错误很难识别,程序运行的不确定性也最大。此外,这种编程方式难度较大,出现较晚,因而也最不成熟。这类软件中最为著名的是Occam语言①。
无论是哪种方式,缺乏通用的设计语言是目前最大的困境。几种常用的程序语言都是以特定机型为基础的,这导致每种程序语言的表征方式,都有某种程度上的特殊性,用其表征的程序与并行计算机的硬件结构密切相关。离开特定机型,这些程序语言就难以发挥应有的作用。由此,发展更为通用的表征形式,成为并行程序发展过程中面临的核心困境。
2.并行程序表征方式的特征
并行系统不可避免地会受到并行性、通信、不确定性、系统死锁、系统的拓扑结构、验证等问题的困扰,而这些问题都与程序语言的表征方式相关。程序语法、语义的复杂,是当前程序语言难以被推广接受的一个主要因素。用户需要自行解决任务和程序的划分、数据交换、同步和互斥以及性能平衡等各种问题。以非冯·诺依曼机为基础的并行计算机系统,决定了运行在其上的并行语言是非自然的,程序的表征方式必须反映其硬件基础的特征。
以Ada、Occam、Petri这三种最具特色的并行程序语言为例,可以看到,不同的并行实现方式导致了相应软件的特性。对这些软件表征方式的特征进行分析,有助于我们认识并行软件的关键问题所在,并客观判断并行程序的发展前景。
(1)Ada程序的表征特征
Ada是美国国防部为克服软件开发危机、耗时近20年开发出的大型编程语言。它利用最新的软件开发原理,在一定程度上突破了冯·诺伊曼机的桎梏,与其支持环境一起形成了所谓的Ada文化。Ada程序的通用性很强,其复杂性和完备性也堪称所有开发软件之最。比如,C语言和C++所具有的功能在Ada语言中都可以更方便地实现。并且,Ada可与C、C++、COBOL、FORTRAN等其他语言联合使用。与其他并行程序不同的是,军用目的使Ada程序设计追求高度的实时性和可靠性。为此,Ada对于数据类型、对象、操作和程序包的定义提供了一系列的功能实现,还为实时控制和并发能力提供相当复杂的功能,并于1995年开始支持面向对象的功能。
本质上,Ada属于串行程序并行化的编程语言,采用自底向上和自顶向下的分级开发模式,具有很强的逻辑性。为了提高程序的可移植性和可靠性,Ada将数据表征与数据操作相分离,并采取了“强类型”设置,不允许在不同的数据类型之间进行混合运算。这就防止了在不同的概念之间产生逻辑混淆的可能性。Ada也几乎不允许任何隐式转换,违反类型匹配要求的部分都会在编译和运行阶段被发现,这就避免了子程序调用的多义性,从而增强了程序的可靠性。也就是说,对于一段看上去没有表达错误和逻辑错误的程序,如果它没有定义数据类型,或者对不同类型的数据进行数值运算,都将不能通过编译程序的检验。对于不同类型的派生数据,即使其母类型相同也不能通过编译。此外,Ada提供的类型限制还可用于精确表明数据类型,以解决程序中存在的各种歧义。
这种表征方式只是告诉编译器确切的数据类型,并没有改变值的类型就解决了歧义问题。可以说,明确的表征方式是Ada语言的一大优势。
对于现代软件设计而言,软件的维护费用往往超过其开发费用。因此,可读性是降低软件后期维护费用的关键性能之一。为了增强可读性和可维护性,Ada采用接近于英语结构的语法形式,具有很强的表征能力,便于程序的开发和维护。
Ada95中规定的基本字符分为图形字符、格式控制符和其他控制符等三类,其书写格式尽量接近英语书写的习惯。对于数字,Ada支持二进制到十六进制之间所有实数型和整数型的任何进制的数字表征,其格式为:Base#Number#,Base表示指定的进制,Number为该进制所表示的数字。
在控制指令(Statement)方面,相比别的程序语言,Ada95只是增强了其可读性。总之,Ada避免过多使用复杂句型,并以较少的底层概念来实现程序的简便性。
以程序包为例,Ada将对象模块的语法定义为:package PKG-NAME isend PKG-NAME
为了便于生成大型复杂程序,Ada对模块实行分别编译。但Ada对于可靠性和可读性的要求,使得其在编译过程十分注重静态检验,从而导致程序代码较长且执行速度减慢。①
作为并行软件,Ada把任务作为最小单元,每个任务中的语句采取串行表征方式,任务间通过共享变量来实现并发性。这种结构适用于多处理机系统的程序设计。此外,Ada提供基于硬件的低级输入/输出程序包,通过共享变量来实现嵌入式编程,可用于所有的嵌入式计算机系统。
(2)Occam程序的表征特征
并行语言最大的特点,就是采用了不同于串行语言的用于表征进程和线程的功能。由于并行系统建模的相关数学基础理论问题还没有解决,Occam语言的通信理论是建立在通信系统演算(CCS)和通信顺序进程(CSP)之上的。②Occam的并行关系主要体现为多个进程之间的并行执行,利用关键字PAR来描述进程之间的同时性。进程之间的通信不同于Ada,Occam不允许通过共享变量来实现进程之间的通信,而是采用通道通信的方式。这是一种单向自同步的通信方式,当发送方和接收方都准备好时,才在进程之间单向传递信息,不能既发送信息又接收信息。因此,通信在Occam中是同步的。但两个进程不能同时处于等待对方发送信息或接收信息的状态,否则就会出现死锁。
Occam语言最大的特点在于它是真正与硬件相匹配的并行程序,可以直接控制各处理器对并行进程的执行,还专门针对硬件定位设计了PLACED语句。根据程序运行的硬件基础,Occam中的多个进程有可能是运行在一个处理器上的软件模拟,也可能真正运行在多个处理器上。因此,Occam语言中区分并发(Concurrency)和并行(Parallel)的概念。前者意指有可能是并行的,而后者则强调真正的硬件层面上的并行。
同所有的高级语言一样,Occam需要对程序中用到的数据类型、表达式、操作运算符、数组、字符串等各种表征方式进行事先约定,此外,还要对并行通信的表征方式进行说明。
Occam在原处理的基础上构建程序结构和流程,最终形成完整的程序。原处理是Occam程序中最简单的可执行动作。与其他程序语言不同的是,原处理只有输入、输出和赋值三种,用以表征其在整个程序结构中是并行还是串行。
(3)Petri网的表征特征
Petri网是佩特里(Carl Adam Petri)提出的一种网状结构模型理论,并逐步发展出以并发论、同步论、网逻辑、网拓扑为主要内容的通用网论(general net theory)理论体系。Petri网的革命性在于,它摒弃了基于冯·诺依曼机的全局控制流,更关注于过程管理,因而没有中央控制,也不存在固有的控制流。全局控制的问题在于,在系统相对复杂的情况下全局状态不仅实时不可知,甚至连某个瞬间状态也不可知。因此,Petri网用局部确定的方式来表征客观实在。②
Petri网适用于描述分布式系统中进程的顺序、并发、冲突、同步等关系,尤其在真并发方面具有独特优势。作为建模和分析工具,Petri网擅长用网状图形表征离散的并行系统的结构及其动态行为,其最大的表征特征是既可以使用严格的数学表征方式,也可以使用图形表征方式。尤其是独特的图形表征方式,可以形象地描述异步并发事件,这来源于其独特的网状结构。“Petri网以尊重自然规律为第一要义,以确保其描述的系统都是可以实现的”③。
作为网状信息流模型,Petri网主要用于表征网系统。长久以来,Petri网一直尝试寻找一种基于某种公认交换格式(interchange format)的协议,提供可以在Petri网模型之间进行明确交流的方式。然而,人们很快便认识到,如果这种协议遵从一种公认的Petri网形式定义,将会取得更好的效果。而Petri网的明确表述,必然是形式定义中抽象句法被精确定义后的具体语法。研究者们公认,提出这样一个标准规范的好的方式,就是建立一套定义标准规范的标准化过程。Petri网标记语言(Petri Net Markup Language,PNML)便是这样一种被认可的规范协议,它的制定促进了Petri网的快速发展以及大规模的应用需求。
Petri网标记语言是一种基于可扩展标记语言(Extensible MarkupLanguage,XML)的交换格式。作为国际标准,Petri网标记语言在其第一部分就定义了Petri网的语义模型(semantic model),并给出了相应的数学定义。当前,经过扩充的“Petri网成为系统规范和程序系统语义描述的工具。”①
Petri网表征的优势在于对复杂系统并发过程的精确描述,而缺点也恰恰在于此。如果对细节的描述过于精确,系统的烦琐程度会呈指数级剧增,即出现所谓的“节点爆炸”。因此,必须要恰当地屏蔽细节。
如今,基于Petri网的应用已遍布计算机的各个领域,其模拟能力已被证明与图灵机是等价的。由于Petri网的类型非常丰富,不同类型的Petri网以及建模工具之间的信息交换成为Petri网标记语言标准化过程中的首要因素。而工作流网(WF_net)以及诸多技术层面的研究则成为Petri网20年来取得的最主要成就。
3.并行程序表征的语义发展趋势
事实上,计算机学界对于并发和并行这两个概念并没有明确区分,常常在同一个意义上使用。对于并发的理解,需要强调的是,并发不是同时发生,而是没有秩序(disorder)。比如说,在Petri网中没有全局时间概念,每个进程依照各自的时间顺序执行。对Petri网来说,讨论进程之间执行的先后顺序没有意义,因为没有可参照的全局概念去确定进程执行的次序。同一个程序运行多次,对于相同的输入,不仅每一次的运行次序不确定,每一次的运行结果也不确定。也就是说,并行程序的运行结果由其具体运行的语境决定。这就使得并行程序的语义具有了不确定性。为了使并行程序在执行过程中能产生与程序语义相符合的效果,就必须弄清楚程序语言各成分的含义。因此,在语境中考察并行程序的语义问题就成为并发研究不可或缺的内容。
符号主义者认为,符号算法实现“从符号到符号的转换,给定这些符号的意义,这样的转换就具有意义”。形式步骤和算法是保真的:“如果我们从真符号开始,算法只会将我们带向真符号”,而且算法可以通过符号的形式性质保持其语义性质。①这似乎表明,形式系统由于我们的规定而获得意义。而塞尔的“中文屋”表明,“符号的语义性质并不附随于它们的句法关系”②。而经过形式计算和逻辑推理之后,这种基于分解的形式语义能否保真?尤其是在过程和结果都不确定的并行计算中,我们应如何确保语义信息的真?
计算机形式系统中,数据都是结构化了的信息。也就是说,所有的数据都具有特定的表征形式,并且数据之间有一定的关系。当大量数据进入并行程序处理系统之后,数据必定会发生形式变化。这种变化过程中,数据所蕴含的语义信息是如何转换的,这种转换能否确保大量数据信息被具有高度不确定性的并行程序处理后语义信息实现正确转换,是并行程序研究的重点。并行系统已不是图灵机意义上的计算系统。对并行表征的语义考察也不能局限在语义分解的层面。对并行程序表征语义的研究,应该考虑表征系统与特定的硬件结构、具体并行计算过程的运行特征等因素,区别对待不同并行模式中的语义表征的模糊性和歧义性问题,尤其是程序运行中整体语义的保真问题。
从20世纪50年代起,程序语言的形式语法研究取得了较大发展,而在形式语义方面一直没有取得较为理想的成果。表征如何获得意义是并行形式系统面临的首要难题。近年来,并行程序的形式语义研究越来越受到重视。对于并发过程的不同理解产生不同的并发计算范式,不同的并行程序语言就是基于这些范式开发出来的。对于并行程序语言的开发者而言,不仅要为不同的应用目标设计该语言的基本结构,还必须定义其语法形式和语义。为了适应不同的计算机硬件体系和开发需求,并行程序语言往往在语法上并不规范。通常,并行程序涉及在局部语法即上下文无关语法层面存在较少歧义,而涉及上下文相关语法即静态语义关系、甚至更深层次问题时,则存在诸多问题。对程序语义进行定义,不仅要定义所有基本元素的意义,还要赋予语法结构以明确的意义。
已有的操作语义学、指称语义学、公理语义学分别从程序的执行过程、数学语义以及逻辑正确性等角度形成了研究程序语言语义的三条主线,但一直不能很好地融合,从而也无法体现在具体的程序语言中。理论界通常认为,这三种类型的语义彼此之间是相对独立的。但温斯克尔(Glynn Winskel)认为,这三种类型的形式语义之间是高度依赖的,它们之间很有可能实现统一,并给出了操作语义和指称语义等价的完整证明。①
程序员编写并行程序,最重要的就是通过程序建立关于现实世界的模型。现实世界的并行性往往体现在过程而非结果中,对并行过程的模拟与控制是并行程序应用的价值所在。并行程序语言的表征力直接决定了所构造的模型对事件过程的模拟能力。语义是程序赋予的,程序的一个主要作用就是表征分解的语义及其集合。②Ada语言、Occam语言和Petri网作为并行程序语言,首先应具有对某个特定应用领域的并行问题进行形式表征的能力,因而必然要具有特定的句法和语义。其句法不仅要适合相应的并行硬件执行系统指令,而且要具有恰当表征分解语义和程序整体语义的表征力。尤其是对各并行事件的状态和过程的准确描述以及事件发生条件及其相互联系的描述,是研究并行表征语义的难点所在。
程序语义学研究形式表征与意义的关系以及形式系统与命题真值之间的关系问题。但它同时指出,语义网格、语义分解等理论只是在符号层面以及词与词的关系层面探讨意义问题,并不涉及语言与世界的关系这一层面。因而不是真正的语义学。①而Petri网的语义基底正是语义网格理论,并且,几乎所有基于形式系统的语义研究都是基于分解的。也就是说,无论是基于冯·诺伊曼机的串行计算系统还是基于非冯·诺伊曼机的并行计算系统,都是离散的自动形式系统,它们按算法规则操作带有语义信息的符号。可采取的算法由形式系统的表征性质决定。给定形式系统的符号语义,相应的算法要保证经过一系列转换之后的符号依然具有可操作层面的意义。而这种形式语义并不是真正意义上的语义学,它最多涉及表征与心理的关系,但无法关涉语言与世界的层面。
程序语义学研究的关键问题是没有涉及意义问题,而这才是语义学的核心问题。②显然,按照这个标准,现阶段的并行程序设计语言研究才刚刚涉及表征的形式语义问题,离整个程序的语义研究还有很大距离。过去的研究大都关注数据所蕴含的语义信息,而忽视了程序动态运行过程中的语义传递及转换问题。
计算机的信息系统,最主要的特征就是信息流动。并行进程中流动的信息主要是各种变量以及变量的值。变量值的变化意味着信息的改变。当一个进程将其变量值传递给另一个变量或进程时,信息流动就产生了。而信息流动也是产生并行程序语义不确定的一个主要原因。
并行进程或线程在运行中,一个非常重要的问题就是进(线)程之间的通信问题。通信是并行程序运行过程中最重要的机制。是进(线)程之间通过通信交换信息,而信息所传递的语义是如何被表达的、以及表达力如何,是当代并行表征需要研究的主要课题。并行系统要确保通信的有效性,必须保证信息表征的一致性。例如,在Occam语言中,由于所有的进程都是同时执行,且进程内变量名和通道等名称的命名和赋值具有局部性——即不同的进程可以拥有相同的变量名和通道名,因此,为了保证通信过程中语义的确定性,Occam不允许通过共享变量来实现进程之间的通信,而是采用单向自同步的通道通信方式,并要求对并行通信的表征方式进行说明。
此外,并行程序的不确定性以及验证方式也需要形式语义学的介入,而这方面的理论研究还很滞后。“语义信息的概念是基于如下的假设而被考察的,即事实信息是最重要的和最有影响力的概念,在这个意义上信息本身‘能够被表达’”①。例如,Petri网中的工作流语义(work-flow semantic)模型,就是利用语义信息去消解冲突。而语义信息的给出与具体处理的任务有关。语义模型的任务只是用于消解冲突,并不考虑工作流任务完成的质量问题。任务完成情况属于工作流管理的范畴。需要注意的是,很多“管理操作都是由语义引起的”②,例如skip和re-turn。只有明确区分工作流逻辑和工作流语义,才能简化工作流模型。否则,不仅增加模型的复杂程度,甚至无法做出正确的描述,以致当程序出现运行错误时,无法找到错误的原因。
总而言之,与并行程序表征的语法定义相比较,语义定义要复杂得多。尤其是并行程序的不确定性等因素,使得相关研究一直无法取得有效进展,至今没有一种较为公认的定义方式。这是因为,并行程序的语义不仅取决于静态语义表征,更依赖于程序运行的动态环境。而并行程序的不确定性是其语义表征的难点所在。确切地说,并行程序的语义就是程序运行过程中的语义,即语境中的语义。语境不确定,程序表征的语义就无法确定。而这种不确定是不可预测和不可避免的。除了程序自身的不确定性,使用计算机的人和并行程序的互动也是不确定性产生的原因。而如何严格表征这种语境的变化对于程序语义的影响,成为并行程序表征的核心问题。因此,关于并行程序表征的语义理论及应用研究,将成为未来并行程序研究的主要发展趋势。
(二)不确定性与计算机模型思维变革
互联网在人们的经济、政治以及日常生活中所占的比重越来越大,不仅为计算机之间进行数据传输提供高效、便捷的通道,更为使用计算机的人提供了一种全新的交流平台。当前,Web 2.0之前那种单方主导数据的时代已一去不复返,迎接我们的是多元化、且实时更新的大数据时代。一方面,网络极大地推动了人类知识的拓展途径,同时,也极大地困扰着人类知识的发展。而互联网自身的不统一性与不规则性,也一定程度上加剧了人们所获取数据的不确定性。以经济活动为中心的网络数据泛滥,使得人们对有效数据的渴求与对垃圾数据的厌弃同样不可避免,这种爱恨交织的矛盾情感亦变得越来越凸显。如何提升人们获取有效数据的效率,同时减少垃圾数据带来的困扰,已不仅仅是一个技术问题,而是“一场生活、工作与思维的大变革”,“大数据开启了一次重大的时代转型”①,“信息爆炸已积累到了一个开始引发变革的程度”②,已从一个学术概念转为人们每天都在切身体验的真实感受,从而变革着我们对世界的理解方式。大数据已然不仅仅是一个计算机科学的研究领域,而被认为是一个即将来临,甚至是已经到来的时代的标签。
在这样一种大数据时代的预设之下,传统数据处理模型,即以精确模拟和结构化的数据库为主要特征的数据处理思维,已无法适应网络社会化发展的现实需求。这使得关于大数据的研究不再局限于计算机学科领域,而是以一种时代转型的重要特征出现在大众的视野之中。
1.计算机模型的确定性之殇
第一,计算机模型的类型及其确定性基础。
计算机模型在本质上是物理世界的符号化,是数学和逻辑思想与计算机语言相结合的产物。我们必须借助符号、数学和逻辑来抽象现实世界中的各种结构、关系和特征,才能在计算机上予以处理。数学和逻辑是计算机科学作为一种具有理性的学科存在之根本。
计算机作为基于逻辑门电路的“一种经典逻辑机器”,③是逻辑学和数学的一种实际应用。计算机模型是运行在计算机形式系统上的模拟方法,一般从定性或定量的角度来刻画现实世界中存在的各种问题,并尝试运用强大的计算能力和数据资源,为现实问题的解决提供有效的数据支持。因此,计算机模型的内容源于对现实原型的抽象,其运行结果必定是基于对现实原型规律性的把握。抽象的角度不同,计算机模型的种类就不同。利用模型的目的,是决定使用哪种模型来运行的首要问题。
从对象原型中变量之间的关系来看,计算机模型可以分为确定性模型和不确定性模型。确定性计算机模型是对现实原型中必然现象的描述,而不确定性计算机模型则是对现实原型中存在的或然现象的描述。在确定性计算机模型中,变量之间的关系是确定的;而在不确定性计算机模型中,变量之间的关系则需要以概率分布或统计值的形式给出。事实上,不论是哪一种,计算机模型的建立,本身就是我们对对象原型规律性进行认知的一种确定性把握,是类比逻辑思维应用于计算机建模过程的结果。
数学与逻辑对于计算机模型的有效性,取决于所采用的算法是否能够恰当地描述用户所需的现实原型。而模型描述世界的能力,则取决于模型中所蕴含的数学思想以及模型所采用的形式语言。尤其在人工智能中,基于形式化的知识表征与相应的数理逻辑运算,已成为人工智能模拟人类智能的经典方法。作为一种利用数学和逻辑方法来解决实际问题的模型方法,计算机模型最大的特征,就是它需要利用强大的数据库作为支持。因此,除了数学建模的思想之外,计算机建模还需要考虑如何搜集所需的数据以及将这些数据以何种结构存储于计算机中,也就是需要构建所谓的数据模型。数据模型是为目的服务的,因而分析使用者对数据的需求以及所需的信息系统的类型,是数据模型必须要考虑的首要问题。尔后要解决数据的来源和采集等问题,接着才能考虑如何设计这些数据的结构,并构建用于其上的逻辑推理和算法问题。从一个概念数据模型转变为一个或数个逻辑数据模型,并定义模型中数据之间的结构和关系,只有这样的结构化数据,才能在计算机系统中发挥其应有的作用。而一个计算机模型是确定性的还是不确定性的,则主要取决于在所形成的数据模型之上采用的推理和算法是否是确定的。
一直以来,对现实原型表征的近似程度,以及数学和逻辑推理的可靠性,是决定计算机模型质量的核心所在。其中,数学和逻辑推理是对已经存在的各种判断之间的联系进行刻画的有效工具,这些判断之中就包括了各种自然规律。因此可以说,在一定程度上,计算机模型是对现实原型中存在的各种现象进行判断的基础上,所形成的各个判断之间的规律系统。这种判断之间规律的形成,就是对诸多判断进行的逻辑加工,此时的逻辑推理就是一种计算。
而我们判断逻辑推理结果是否正确的标准,不仅要看推理过程是否符合已有的逻辑规则,还要看结果是否符合我们的已有经验。也就是,能否在现实世界中为这个结果找到一个证明其存在或有效的实例。因为逻辑规律是对人类经验的归纳,逻辑的有效性源于利用那些符合经验的规律所进行的推理结果的合经验性。
虽然逻辑与数学赋予计算机模型以可靠性,但它们自身的可靠性却有待考量。这也是以追求终极真理的确定性世界观所不能容忍的。自身都无法保证科学性,如何成为所有其他学科可靠性之根本?尤其是在大数据时代,数据本身的复杂性以及处理数据工具的不确定性,对我们而言将意味着什么?这恰恰是关涉计算机模型思想之变革是否可行的根本性问题,也是网络智能化过程中难以逾越的关键所在。世界被符号化于网络之上,而网络则被模型化为终端可获取的状态。如何看待互联网世界与计算机模型之间的关系,是影响这个时代所有人理解其与世界之间是何种关系的根本问题。
第二,确定性计算机模型的症结。
毋庸置疑,在计算机形式系统之上,确定性计算具有绝对的优势。然而,在大数据时代,成也萧何败也萧何。早期,确定性作为计算机的绝对优势,在当前却成为计算机学科发展中最难以逾越的障碍。
传统图景中,科学立足于理性主义立场,即以数学和逻辑作为其可靠性的保障:数学作为一种“必然和先天可能的”存在,"与物理世界有某种联系”,“对于科学地探索世界来说是本质的东西”①;逻辑以“秩序”和“规律”为最基本含义②,“是关于推理和论证的科学”③广泛存在于人们的日常生活和思维中。而数理逻辑的出现,则将逻辑与数学相结合,为现代科学的知识体系打下了坚实的理性基础。理性主义作为一种世界观,早已深深根植在现代自然科学研究的各个领域。这是一种以世界必然是有秩序的和有规律的为信念的研究基点,所构造出的必然是可以用逻辑和数学语言来描述的理性主义知识体系。这种知识体系最大的体征就是可论证性,也就是预设着真的存在。
确定性计算机模型源于对世界确定性规律的把握,作为一种对现实原型在满足“一定条件下必然发生的事情”①进行判断的工具而存在。以经典逻辑为基础,用确定性知识和精确推理来保障推理结果的可靠性,是确定性计算机模型的主要特征。然而,确定性推理的弊病在于:
首先,实际应用中,在给定初始条件的情况下,我们无法保证初始条件永远不变。一次建模只为某个特定的应用服务,以一套公理化体系为依托,追求严密性的推理过程以及精确的推理结果。这使得模型对所运行的环境条件要求极为苛刻,稍加改动就必须重新建模。并且,确定性计算机模型对初始条件的数目要求也极高,初始条件的数目不能庞大到我们难以在其之上进行有效的逻辑推理。早期确定性计算机模型的开发成果,就是因为这些原因难以推而广之。
其次,确定性计算机模型所用的初始条件以及逻辑规则是有问题的,现实世界中没有多少事件能够完全符合确定性模型的要求。因为确定性模型所利用的初始条件以及推理规则,都是从现实原型中抽象出来的特征,而“特征是有问题的”,因为“不存在已经建立起的标准来判定特征是同一的还是有区别的”。“特征似乎分享了集合和数的缺点。它们不存在于空间和时间中,它们没有进入与物理对象的因果关系中”②。随着信息时代的到来,计算机描述能力的增强,表征现实原型的数据模型越来越逼近于“全息数据”。而以特征抽象为基础的确定性计算机模型,则更加难以胜任大数据时代对各类数据进行有效分析的要求。
人类的知识和经验存在着大量的不确定性,包括量子力学以及相对论在内的理性主义中,最为本质的“自然法则表达确定性”、因而可以“预言未来,或‘溯言’过去”的传统图景,遭到前所未有的颠覆。不确定性使“自然法则的意义发生了根本变化,因为自然法则现在表达可能性或概率”①,科学不再与机遇无涉而独尊因果决定论。广泛存在的不确定性成为确定性计算机模型之殇。
2.不确定性对计算机模型思想的挑战
第一,确定性世界观对不确定性理论的影响。
到目前为止,计算机依然是图灵机理论在冯·诺伊曼结构上的实现。但需要引起足够重视的是,计算机并不等同于图灵机,二者的关键区别在于:“图灵机是无穷的,而计算机是有限的”,“因此任何计算机都可以用命题逻辑描述为一个(超大规模的)系统,该系统不受哥德尔不完备性定理的制约”。而图灵和哥德尔作为数学家,贯穿于他们学术生涯的“某些数学问题在原理上就是无法被特定的形式系统解答的”②。基于二进制的计算机形式系统,其局限性并不等同于图灵机,亦不适用于所有的数学问题。在有限形式系统可解的范围内,计算机必然要从确定性的数学和逻辑出发,通过一层层的形式转换机制,才能达到用确定性系统来构造不确定性计算的目的。
并且,在理性主义影响下,确定性的世界观依然是驱动现代科学技术向前发展的根本信念。即便在人们的日常生活和科研活动中存在着诸多的不确定性,人们对这些不确定性的理解,也是建立在可预测和可模型化的暗喻之上的。人们研究各种不确定性现象,目的是寻找隐匿于表象之下的秩序,或者是寻找如何控制那些看起来极为复杂的系统的方法。人类始终期望能够对世界的终极状态加以预测,可预测几乎是所有科学研究的出发点和归宿。
对于计算机模型的研究亦是如此。用简单的数学公式或抽象的数学模型去描述复杂的现实原型,几乎是所有不确定性研究的必然途径。人们总是期望用最小的代价实现对复杂的现实原型的模拟。对计算机模型而言,不确定性意味着“缺少足够的信息来作出判断”①,因而事先无法确切地知道某个事件的结果、或者事件的结果可能不止一种。例如,波兰科学家帕拉克(Zdzislaw Pawlak)提出的粗糙集理论就是一种用于处理不完整或不确定性数据的有效工具②,可以从不精确、不完整或不一致的数据中发现隐含的规律③。不确定性对于决策而言是一个不好的存在,它导致系统给出的决策是不可靠的,甚至是糟糕的。在网络商业化应用中,不确定性带来的很可能是直接的巨大经济损失。因此,消除不确定性因素、提高模型的可利用价值,一直是不确定性计算机模型努力的方向。
此外,数学算法本身可以解决的不确定性问题是很有限的。当纯粹的数学计算难以处理诸如模糊、不确定、不精确、歧义、似然等现象时,就需要逻辑推理来解决。也就是说,逻辑推理可以弥补数学算法的不足之处。尤其是在较为复杂的计算机模型中,逻辑推理能够在缺少参数、或者没有合适的数学算法、抑或是信息不完整的情况下,完成不确定性计算机模型设定的目标。并且,除了以往的静态描述逻辑,近些年来,针对语义网中不断变换的动态数据又逐步发展出了动态描述逻辑(Dynamic Description Logic,简称DDL)理论,①为同时处理静态数据与动态数据提供了统一有效的形式化框架。
第二,计算机模型中的不确定性。
通常认为,计算机模型的构建包括模型规划、数据收集、模型设定、校准与确认、仿真与评估等几个阶段。与确定性计算机模型相比,不确定性计算机模型往往更符合现实需要。由计算机解决的各种实际问题,往往不需要绝对正确和绝对精确的结果。在不确定性计算机模型构建的整个过程中,可能面临以下几个方面的不确定性问题:
其一,在从现实原型中抽象出计算机模型的过程中产生的不确定性问题。人类的认知和记忆中存在着大量的不确定性,要想把人类从现实世界中获取的各种复杂性认知融合到计算机模型中去,就必然要以损失关于现实原型的全息数据为代价。在这一过程中,会出现各种各样的不确定性问题。由于建模对象的不同,所面临的问题也会有所不同。此外,针对同样的现实原型,可以构建不同的计算机模型,在模型生成的各个阶段——从数据输入到参数设置、再到模型结构设计与模型处理的结果——都存在着各种不同的不确定性因素,这些都导致了计算机建模过程中的不确定性问题。
其二,计算机模型的规则系统中存在的不确定性。由于计算机模型是一个基于规则的系统,关于规则有可能存在以下几种不确定性:
(1)存在于单个规则中的不确定性。单个规则的不确定性是对现实原型的单个特征进行抽象的结果,是认知和表征不确定性的直接体现。其中,在规则的前件和后件中通常会遇到由于误差、证据的似然性以及证据组合等因素造成的不确定性。这类不确定性需要通过验证来规避。
(2)由于规则间的不兼容性所导致的不确定性。在一个计算机规则系统中,所有的单个规则都是恰当的,并不意味着整个规则系统就是可靠的。很可能由于抽象角度的不同,致使规则之间出现不兼容性,从而导致推理结果是不确定和不可靠的。与规则的兼容性相关的不确定性有可能出现在规则间的矛盾、规则包含、规则冗余、遗漏规则以及数据融合等方面。对于这种不确定性,需要通过减少每个推理链中的确定性,来减少局部以及整个模型中的不确定性。
(3)冲突归结中存在的不确定性。由于规则有显式优先级和隐式优先级,当两个或两个以上的规则同时具备被引发执行的条件、从而导致推理机无法根据优先级别来确定这几个规则的执行次序时,就会出现规则之间执行次序的不确定性。这类不确定性无法避免,但可以通过从规则堆栈或队列中随机选取的方式来避免模型中的人为机制。①
其三,算法理论中的不确定性。
计算机模型中,与不确定性相关的算法理论主要有概率理论、模糊集理论、粗糙集理论、混沌与分形等。它们最大的共性就是都属于算法复杂性的范畴。“一个数据序列的算法复杂性”是指“作为输出而得到这一序列的计算算法的最小长度”②。也就是说,“算法复杂性即是一给定(有限)序列的最简短扼要描述之长度”③。算法复杂性处于最大可能的算法复杂性与最小可能的算法复杂性之间。完全随机序列有着约等于其自身长度的最大可能的算法复杂性,并可认为其中包含的信息是最大的;而一个单符指令序列因其完全可以将该单符再生而具有最小可能的算法复杂性,且其包含的信息为零。④而“信息涉及的基本条件为:(i)一种鲜明的空间中的对称性破缺”,“(ii)一种不可预测性要素与揭示读者开始不能推断的课题或讯息相关联”。对于一组包含信息的富信息序列而言,我们对其局部讯息的了解不能成为对其整体结构加以推断的依据,“不管这局部有多大”。在这个意义上,整体结构是不可预测的,“可视为一随机过程”⑤。
需要注意的是,算法复杂性不同于物理科学中的复杂性。在物理科学中,“简单与复杂、无序和有序之间的距离远比人们通常想象的短得多”①。从简单、有序状态到无秩序无规律的分子混沌状态,只是几埃(亿分之几厘米)的距离。也就是说,在物理科学中,简单性由分子之间的短程特性决定,而复杂性则同分子之间的长程特性相关联。②复杂性“似乎已经根植于自然法则之中了”,“将揭示不同等级的系统之间的某些共同性质”③。自然客体的复杂性处于最大可能复杂性以及最小可能复杂性两个极端情况之间。这种特性与算法复杂性处于最大可能的算法复杂性与最小可能的算法复杂性之间这一特性的相似性,是物理科学中的复杂性与算法复杂性之间最大的共性,也是可以将这两种复杂性相联系的最主要因素。
在计算机科学中,当说到复杂性与复杂系统这两个概念时,需要甄别当这两个词用于某个特定对象时所特指的含义。通常,复杂性比复杂系统的意义更为明确。计算机模型中所涉及的不确定性算法理论,每一种都有其优势以及不可避免的缺点。这就需要根据特定现实原型的特征,综合利用各种相关理论来解决不确定性计算机模型中的问题。这才是提升模型处理能力的必要手段。但问题是,当你需要模型化的现实原型的不确定性特征需要不止一种理论时,有可能没有相应的编程工具帮你在一个模型中同时实现多种不确定性理论的应用。此时,联合其他开发工具和资源是必要的选择。
3.不确定性之于计算机模型的意义
当“时间之矢”不再隶属于现象学范畴,人们无须纠结于爱因斯坦构造的那难以理解的“时间错觉”,才能够在时间这一基本维度中去感受生命真实的存在,当非平衡过程物理学赋予不可逆性以新的含义,它便不再是“一种如果我们具备了完善的知识就会消失的表象”①,而是地球上生命现象之所以会出现、并不断演化的根源之所在。当不稳定系统动力学使自然法则可以表达可能性,相关关系便获得了向因果关系讨要话语权的资本,当互联网以不可思议的速度深刻变革着人类的生存模式,“一切皆可量化”②,数据开始主宰一切,绝对精确为效率让路,信息时代向大数据时代迈进。
在这样一种大数据时代预设下,传统的计算机模型思想难以解决各种新出现的应用问题,一种全新的建模思想有待形成。大数据时代,不确定性对于计算机模型思想的意义在于:
首先,大数据时代的不确定性问题,向传统计算机模型思想中的经验性提出挑战。传统的计算机模型,无论是确定性的还是不确定性的,都是对经验的一种概括和总结,同时亦预设着对结果的某种程度上的把握。从20世纪90年代初开始的互联网商业化进程,加速了大数据时代到来的步伐。互联网本身就是一个没有确定性物理规则的实体,其上的数据资源更是以各种不同的形态存在于各种网络、各种类型的数据库之中。这些数据资源日益庞大且不断更新,为计算机模型的构建带来了极大的困扰。
在互联网商业化时代,数据爆炸带来的是人们对以往经验的否定。在海量的数据面前,有着明确预设的经验规律不再可靠,人们强烈感觉到信息不完善给决策带来的困扰,更不用说利用已有的经验对未来进行预测。但令人感到尴尬的是,“科学又无疑是经验的”①。当人类将其在物理世界中经验到知识的归纳为科学时,经验的不确定性,使得传统数学与逻辑中的确定性思维,以及不确定性计算,都难以逼真地描述某些人们从现实物理世界中归纳出的科学知识。尤其在大数据时代,即便是数学与逻辑的结合,也难以胜任不断出现的各种不确定性问题。特别是在语义理解以及网络智能化的计算机模型方面,人类经验难以归结为一条条适用于各种语境的计算机可执行的规律,进而无法形成有效的模型处理系统。这也是计算机模型思想一直无法获得令人满意进展的一个主要原因。当描述世界必然现象的确定性模型不再独步网络、且描述世界或然现象的不确定性模型也难以满足复杂的网络应用时,计算机模型思想中固有的基于大量经验总结出的规则体系,就成为大数据时代模型思想变革面临的一个最主要的难题。
其次,海量的非结构化数据是计算机模型思想变革着力要解决的问题。
计算机模型在不确定性问题上取得的进步,极大地改善了人们处理数据的技术水平,小数据时代的随机样本已被全体数据所代替。现有的不确定性计算机模型的最大优势,是能够在已知的海量数据基础上发挥不确定性算法的优势,尤其擅于处理那些具有某种复杂性的现实原型的模型。但这种处理的有效性是建立在对现实原型大量原始数据的把握之上,以传统结构化的数据库为基础。然而,“黑天鹅事件”告诉我们,未知的才是更重要的。大数据时代,人们追求的是数据化而不是数字化,更关注未知因素有可能对自己造成的重大影响。
在数据问题上,对人类而言,过去和现在的区别在于数据的量以及处理方法上。过去人们需要面对的数据量少,处理方法落后,数据获取渠道不畅且获取成本很高。现在人们被各类数据所包围,尤其在网络上,信息获取方便且成本很低,但数据量巨大。如何获取有效信息,甚至如何避免不相关信息或价值含量很低的信息对我们正常工作的干扰,几乎成为每个使用网络工具的人每天必须克服的难题。个人数据管理所涉及的不再是仅仅针对个人数据信息的问题,还包括所有非个人自愿却不得不面对的那些大量的“意外数据”。它们不是我们当前最需要的数据,但却因为我们使用了别的信息而被迫接收它们。无论在视觉效果上还是心理层面上,它们都很有吸引力,会引导人们支付更多的时间甚至货币去消费它们,带来的大多是负效益,但我们却难以管理它们。当互联网上只有5%的数据是可用于传统数据库的结构化数据时,人们必须学会利用剩下那95%的非结构化数据。当我们难以在海量的数据之间建立精确的逻辑链时,因果关系为相关关系所取代。人们没有必要知道为什么,只要知道是什么就足够了。①已有的不确定性计算机模型,无论从算法上还是逻辑推理上,都无法满足人们的现实需求,一种新的不确定性世界观,正从一个理性概念转变为大多数人日常都可以感知到的现实存在。
根据数据的不确定性,人们提出过不同的数据模型理论,其中最核心的不确定性数据模型思想就是可能世界模型(possible world model)理论②,主要用于构建与特定现实原型的场景相匹配的不确定性数据模型,③可以从一个不确定性数据库衍生出多个被称为可能世界实例的确定性数据库。而将不确定性与数据的世系(Lineage或Provenance)有效地整合在一起④并提出相应的算法,亦成为计算机模型必然要面临的一个问题。数据的世系已成为研究单一数据库以及跨数据库的数据的产生与演变过程的一种主导方式。事实上,传统的计算机模型,无论是确定性的还是不确定性的,在如此海量且不规则的非结构化数据面前都显得捉襟见肘,不确定性计算机模型理论亟待变革。大数据意味着,计算机模型的构建,不再仅仅是搜集足够的数据并抽象出能够真实反映现实原型的规则体系和算法结构,而是帮助用户洞察这些庞大的非结构化数据之间的关系、并利用其为决策制定和价值创造贡献力量。正如孔茨(Kathy Koontz)所言,“重要的不是数据,而是如何使用数据”。在大数据时代,“数据的核心是发现价值,而驾驭数据的核心是分析”①。这些海量存在的非结构化数据已成为计算机模型思想变革着力要解决的核心问题。
最后,新的不确定性问题为计算机模型思想变革指明了方向。
互联网的扩张与智能终端的普及,迅速将人类推进到一个超乎想象的大数据时代,在带给人类便捷的同时,不可避免地也带来了困扰。变革的速度考验着人们的适应能力,网络化程度越高,困扰就会越大。对整体形式的确定性把握业已成为一种奢望,在各类庞大的、实时变化的数据面前,人们变得不再自信满满,数据选择成为大数据时代每个人时常都会遇到的问题,机会成本正在成为一个难以估量的因子。在尚未学会如何驾驭数据之前,我们往往先迷失了自己。
虽然互联网在以前所未有的速度扩张,但各相关领域却始终没有取得多少实质性的理论突破。不仅强人工智能的愿望遥不可及,就连扩张过程中出现的实际应用问题也难以给出一个具有建设性的解决方案。在大数据时代,以面向对象、模块化、封装、抽象化以及测试为主要特征的经典程序设计思想,显得无所适从,而兴及一时的云计算、深度学习、机器学习以及大数据,则被业界戏称为计算机界的四大俗。之所以说它们俗,很大程度上是因为,在解决同类问题上,人为地创造出四个颇具市场效力而缺乏学术价值的概念,却没有多少本质上的区别。真正的突破尚未取得,但对获取突破的可能路径已经达成了较为一致的认识,那就是,必须到作为计算机之根本的形式语言、数学以及逻辑理论中去寻找,到新的不确定性理论中去探索。
总而言之,大数据时代对计算机模型思想而言,带来的是一种全新的不确定性理念。它不仅颠覆了人们对传统的确定性以及不确定性理论的理解,而且也很有可能导致计算机模型在未来对新的不确定性算法的突破。无论是市场还是学术,都希望突破瓶颈期,尽快解决网络扩张过程中出现的各种实际问题,并且为可能到来的以互联网技术和可再生能源技术相结合为主要特征的第三次工业革命,扫清一部分技术障碍。“经济是一种有关信任的游戏”①,构建以网络技术为依托的社会信任机制,将是未来社会经济繁荣发展的重要支撑。而互联网在快速扩张中出现的各种问题,使得公众对互联网自身的安全问题都难以产生应有的信任感,更不用说对网络虚拟生活中的人际关系、经济关系、数据通信安全等各种关系产生信任。由此,利用互联网技术来推动社会变革、并建立相应的信任机制,实现起来就变得困难重重。如果说公众信任是经济发展之依托,那么,互联网则是大数据时代这一依托之技术根基。要想获得真正的突破,不仅需要找到计算机模型在不确定性领域的症结所在,更主要的是能够整合市场、技术以及管理等诸多相关资源,才有可能在各个领域以及各个层面之间寻求一个适合全局发展要求的契合点,从而制定出可执行的方案。
这是一个解构确定性世界观的时代:当不确定性作为一种新的理性为自然界立法,牛顿和爱因斯坦描绘的那个没有时间维度的、可逆的确定性世界,逐步为普里戈金的不可逆且可确定的概率世界所取代。从宏观到微观、从自然科学到社会科学,不确定性理论正逐步解构着各个领域原本占据统治地位的确定性世界观。大数据预设下,在计算机模型领域,一种全新的不确定性世界观亟待形成。