闵应骅的博客分享 http://blog.sciencenet.cn/u/ymin 一位IEEE终身Fellow对信息科学及其发展的看法

博文

新的软件危机(110419) 精选

已有 7090 次阅读 2011-4-19 17:43 |个人分类:计算机|系统分类:科研笔记| 计算机, 操作系统, 多线程, 处理器

新的软件危机(110419)
闵应骅

    在上世纪60-80年代,计算机面临软件危机。主要表现在硬件生产出来以后,软件跟不上,开发经费很高,而正确性得不到保证,甚至引发安全事故。典型的例子是IBM360的操作系统OS/360,经历了10年,用1000人才完成了这一个复杂的系统。慢慢地,由于结构化程序设计、面向对象程序设计、CASE工具的出现、形式化方法的引入,终于使这个问题有所缓解,虽然至今软件项目失败的几率仍然很高。
    近年来,多核处理器的出现是多线程的程序并行化成为急需解决的问题。上世纪80年代,美国成立专门的中心做串行程序并行化的工作。我们知道,Fortran程序库是人类文明的宝库,是几十年程序工作的积累。但都是串行程序,需要把它们并行化。我的一个朋友被请去当主任。可惜,几年下来,不了了之。据说他现在在某大公司做高管。因为要自动并行化太困难了。可现在,有了多核处理器,如果程序不能并行化,多核就等于没有用。现在,我国自己的多核芯片已经出来了,超级计算机也已经国际领先了。硬件有了,软件呢?全世界的情况也是如此。所以,我认为,并行编程技术应该是计算机领域第一重要的事情。
    所谓并行编程就是要让多个处理器同时分担任务,较少相互通信,以解决同一个大的计算问题。本月的IEEE Computer上一篇“回避下一次软件危机”中提到,三种软件工程机制可以帮助我们把串行程序并行化。

1.代码重构

    代码重构是指为改进软件内部结构并保持其外部行为而修改软件的过程。它可以半自动地把串行程序并行化,也可以改进已有的多线程程序。这种改变可以由人逐步地增量式的进行。例如用局部变量代替全局变量;修改数据结构及其布置;修改循环索引表达式;由于循环是不好并行的,可以将循环分裂、合并、延后或关闭。这些想法还是要人来提供的。自动并行编译就是因为碰到同样的困难,而无法做到完全地优化和自动化。代码重构多线程程序就更加困难一些,因为很难跟踪整个程序,而不光是跟踪一个线程。例如增加一个变量对于单线程是很容易的。但是,对于多线程的全局协同就可能受损,别的线程可能不可达该变量,甚至产生竞争。

2.模型驱动工程

    模型驱动工程的目的是用规范和处理虚拟模型提高程序的抽象程度,去掉一些非本质的东西,以降低复杂性。然后根据模型用代码产生器产生代码。这在串行程序里已经用上了,对并行程序也可以用。由于各层的模型是一种抽象,所以,考虑模型的并行要比考虑代码的并行容易一些,从而使得有些分析和变换比较容易自动化。

3.重组再设计

    重组再设计包括从传统软件抽出模型的逆向工程,并用另一种较好的方式重新实现该模型。如果要并行化,就需要在该模型中重新引进并行性。通过模型变换和代码产生来引进并行性可以累积程序的修改,提高程序质量。

    这些工程方法对并行编程会很有帮助,而且相应的软件工具也会不断出现。但是,说老实话,不能从理论上说明什么叫并行计算,这些工程方法只能是摸着石头过河。


https://blog.sciencenet.cn/blog-290937-435009.html

上一篇:科学网的什么文章最热门?(110412)
下一篇:技术路线,什么该走,什么不该走?(110504)
收藏 IP: 121.18.127.*| 热度|

17 朱新亮 刘洋 黄富强 文双春 谢鑫 苏晓路 齐霁 陈绥阳 何振峰 邱嘉文 张利华 阎建民 邹晓辉 俞立 dulizhi95 lixuke2005 mbb

发表评论 评论 (22 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-4-24 23:54

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部