楼主: rogercc
681 0

[休闲其它] 新的软件危机(110419) [推广有奖]

  • 0关注
  • 0粉丝

博士生

14%

还不是VIP/贵宾

-

威望
0
论坛币
118 个
通用积分
0
学术水平
1 点
热心指数
4 点
信用等级
0 点
经验
1250 点
帖子
105
精华
0
在线时间
43 小时
注册时间
2009-6-29
最后登录
2014-5-5

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
新的软件危机(110419)
http://blog.51xuewen.com/ymin/article_42354.htm
blog#51xuewen.com/ymin/article_42354.htm(访问请将#换为.)
闵应骅
    在上世纪60-80年代,计算机面临软件危机。主要表现在硬件生产出来以后,软件跟不上,开发经费很高,而正确性得不到保证,甚至引发安全事故。典型的例子是IBM360的操作系统OS/360,经历了10年,用1000人才完成了这一个复杂的系统。慢慢地,由于结构化程序设计、面向对象程序设计、CASE工具的出现、形式化方法的引入,终于使这个问题有所缓解,虽然至今软件项目失败的几率仍然很高。
    近年来,多核处理器的出现是多线程的程序并行化成为急需解决的问题。上世纪80年代,美国成立专门的中心做串行程序并行化的工作。我们知道,Fortran程序库是人类文明的宝库,是几十年程序工作的积累。但都是串行程序,需要把它们并行化。我的一个朋友被请去当主任。可惜,几年下来,不了了之。据说他现在在某大公司做高管。因为要自动并行化太困难了。可现在,有了多核处理器,如果程序不能并行化,多核就等于没有用。现在,我国自己的多核芯片已经出来了,超级计算机也已经国际领先了。硬件有了,软件呢?全世界的情况也是如此。所以,我认为,并行编程技术应该是计算机领域第一重要的事情。
    所谓并行编程就是要让多个处理器同时分担任务,较少相互通信,以解决同一个大的计算问题。本月的IEEE Computer上一篇“回避下一次软件危机”中提到,三种软件工程机制可以帮助我们把串行程序并行化。
1.代码重构
    代码重构是指为改进软件内部结构并保持其外部行为而修改软件的过程。它可以半自动地把串行程序并行化,也可以改进已有的多线程程序。这种改变可以由人逐步地增量式的进行。例如用局部变量代替全局变量;修改数据结构及其布置;修改循环索引表达式;由于循环是不好并行的,可以将循环分裂、合并、延后或关闭。这些想法还是要人来提供的。自动并行编译就是因为碰到同样的困难,而无法做到完全地优化和自动化。代码重构多线程程序就更加困难一些,因为很难跟踪整个程序,而不光是跟踪一个线程。例如增加一个变量对于单线程是很容易的。但是,对于多线程的全局协同就可能受损,别的线程可能不可达该变量,甚至产生竞争。
2.模型驱动工程
    模型驱动工程的目的是用规范和处理虚拟模型提高程序的抽象程度,去掉一些非本质的东西,以降低复杂性。然后根据模型用代码产生器产生代码。这在串行程序里已经用上了,对并行程序也可以用。由于各层的模型是一种抽象,所以,考虑模型的并行要比考虑代码的并行容易一些,从而使得有些分析和变换比较容易自动化。
3.重组再设计
    重组再设计包括从传统软件抽出模型的逆向工程,并用另一种较好的方式重新实现该模型。如果要并行化,就需要在该模型中重新引进并行性。通过模型变换和代码产生来引进并行性可以累积程序的修改,提高程序质量。
    这些工程方法对并行编程会很有帮助,而且相应的软件工具也会不断出现。但是,说老实话,不能从理论上说明什么叫并行计算,这些工程方法只能是摸着石头过河。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Computer Article compute Fortran Comput 软件 危机

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加JingGuanBbs
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-5-21 19:52