多核并行计算时代的来临
来源:互联网 发布:思齐软件是什么 编辑:程序博客网 时间:2024/05/02 01:48
多核并行计算时代的来临
作者:banq 发表时间:2008年11月13日 10:08
原贴网址: http://www.jdon.com/jivejdon/thread/34917.html
a worldwide shortage of people experienced in parallel computing
全世界程序员最大短处就是缺乏并行计算经验
当CPU进入双核多核,软件架构进入分布式计算 云计算时代后,他们的共同点并行计算已经成为一个新的热点。
前 段时间Ruby On Rails JRuby Grails等新式语言有些热门,但是并行计算却是它们的杀手,新的并行计算DSL(Domain-specific language)语言 Scala Clojure 以及Erlang在这几个月已经成为新的明星。
Scala是一个兼容JVM的并行语言,后台有IBM等大公司支持,而Erlang是最早由爱立信推出的一个开源语言,目前尴尬是缺乏象IBM这样软件巨头支持。2009将有各种有关Clojure语言的介绍。
在这样的背景下,有人就提出:Java是否已经发展到顶了,可能走下坡路了呢?(Dead like COBOL )
最近Yahoo网格云计算小组发布一项惊人性能测试结果:
Java开源Apache Hadoop赢得了TB级别的最快基准测试,Hadoop可以在209秒内完成1 TB数据排序,打破了前期297秒的年度记录(Daytona),成为最快纪录冠军,这是一项1998由Jim Gray创建的基准测试,指定输入数据( 100亿个100字节的记录) ,彻底地排序,并写入磁盘。
Java 取得这项测试的胜利,并不是因为Java语言走上了并行语言,而是Java从诞生那天起,就是为网络而生,它是通过多台服务器并行计算取得了这项骄人的成 绩,还是那句话:Java在个体上可能拼不过你,但是集成群了就能战胜你,就象蚂蚁个体虽小,但是大量成批蚂蚁也是任何生物的杀手。
Java语言因为其高瞻远瞩的前瞻性取得了生命延续,但是这并意味着其停滞不前,如今单台服务器进入CPU时代,如何在单台PC的微结构中象Scala那样提高多核并发计算性能,将是Java 7推出的新特点。
但是,这并不像以前推出的一些新功能特点,并行计算需要程序员思维方式的改变。其实,从jdon.com讨论来看:程序员相当缺乏并行开发思维,从以往不习惯线程并发 到面对EJB这样分布式组件开发的抓狂,都说明一些人的思维升级换代已经跟不上CPU了(最后机器人会战胜一部分人 悲哀)。
Java 线程模型提供了开发者很方便的并发开发,并发展到javaEE的Web,使用Jsp/Serlvet封装多线程,避免一般软件开发者涉及过于复杂的线程编 程,当我们开发一个Web应用时,部署到Tomcat/Jetty/JBoss服务器上,如果某个时刻有多个用户同时对这个Web应用发出请求,那么服务 器将分派多个线程分别接受处理这些并发请求。这实际上已经是一个多用户并发系统,但是CPU处理并发请求任务时,由于是一个CPU,因此实际上内核是顺序 执行的,现在两个CPU多核机器已经开始普遍,如何发挥多核CPU的并行计算模式呢?
这就要对以往计算模式进行颠覆性的修改,并行计算 (parallel computation)这个概念的意思应该这样定义:在单台PC机中可以跨多核CPU运行,部署到多台PC机中,能够跨越多台服务器云计算。这样的伸缩 性非常类似无所不能的孙悟空了,这样的并行计算模式才是真正可伸缩的Scalable!
而目前唯有Java最有希望做到这点,Java只要补上微结构多核并行运行这一课,而Scala Clojure 以及Erlang要补集群 云计算这一课,这也是Scala非常靠近Java一个原因。
伟大并行计算专家Doug Lea的 Java fork/join framework为java这趟补课提供了及时雨,下面这段代码展示java并行计算方式:
import jsr166y.forkjoin.*;
class Fib extends RecursiveTask<Integer> {
static final int threshold = 10;
volatile int number;
Fib(int n) { number = n; }
public Integer compute () {
int n = number;
if (n <= threshold)
return sequentialFib(n);
else {
Fib f1 = new Fib(n - 1);
f1.fork();
Fib f2 = new Fib(n - 2);
return f2.forkJoin() + f1.join();
}
}
public static void main(String[] args) {
try {
int groupSize = 2; // number of CPUs
ForkJoinPool group =
new ForkJoinPool(groupSize);
Fib f = new Fib(40);
Integer result =group.invoke(f);
System.out.println(“Fibonacci Number: “ + result);
}
catch (Exception ex) {}
}
int sequentialFib(int n) {
if (n <= 1) return n;
else return sequentialFib(n-1) + sequentialFib(n-2);
}
}
fork/join framework将被整合进入JDK 7版本。
当然,新的语言有更方便简洁的实现,Scala 或 Clojure也许成为替代ROR/Groovy的明日之星,
或者这两个语言有各自的细分市场。在未来某个时刻,也许应该死亡的是PHP/ROR。
多核时代开启了软件编程新时代,我们面临更多挑战和创新,好的工具和平台可以帮助我们更好地进入新时代。
参考文章:
Is Scala or Clojure poised for stardom?
http://www.nofluffjuststuff.com/blog/andrew_glover/2008/10/is_scala_or_clojure_poised_for_stardom_.html
Guest View: Java + multicore = good news
http://www.sdtimes.com/link/32943
多核并行计算时代的来临
作者:banq 发表时间:2008年11月13日 10:08
原贴网址: http://www.jdon.com/jivejdon/thread/34917.html
a worldwide shortage of people experienced in parallel computing
全世界程序员最大短处就是缺乏并行计算经验
当CPU进入双核多核,软件架构进入分布式计算 云计算时代后,他们的共同点并行计算已经成为一个新的热点。
前 段时间Ruby On Rails JRuby Grails等新式语言有些热门,但是并行计算却是它们的杀手,新的并行计算DSL(Domain-specific language)语言 Scala Clojure 以及Erlang在这几个月已经成为新的明星。
Scala是一个兼容JVM的并行语言,后台有IBM等大公司支持,而Erlang是最早由爱立信推出的一个开源语言,目前尴尬是缺乏象IBM这样软件巨头支持。2009将有各种有关Clojure语言的介绍。
在这样的背景下,有人就提出:Java是否已经发展到顶了,可能走下坡路了呢?(Dead like COBOL )
最近Yahoo网格云计算小组发布一项惊人性能测试结果:
Java开源Apache Hadoop赢得了TB级别的最快基准测试,Hadoop可以在209秒内完成1 TB数据排序,打破了前期297秒的年度记录(Daytona),成为最快纪录冠军,这是一项1998由Jim Gray创建的基准测试,指定输入数据( 100亿个100字节的记录) ,彻底地排序,并写入磁盘。
Java 取得这项测试的胜利,并不是因为Java语言走上了并行语言,而是Java从诞生那天起,就是为网络而生,它是通过多台服务器并行计算取得了这项骄人的成 绩,还是那句话:Java在个体上可能拼不过你,但是集成群了就能战胜你,就象蚂蚁个体虽小,但是大量成批蚂蚁也是任何生物的杀手。
Java语言因为其高瞻远瞩的前瞻性取得了生命延续,但是这并意味着其停滞不前,如今单台服务器进入CPU时代,如何在单台PC的微结构中象Scala那样提高多核并发计算性能,将是Java 7推出的新特点。
但是,这并不像以前推出的一些新功能特点,并行计算需要程序员思维方式的改变。其实,从jdon.com讨论来看:程序员相当缺乏并行开发思维,从以往不习惯线程并发 到面对EJB这样分布式组件开发的抓狂,都说明一些人的思维升级换代已经跟不上CPU了(最后机器人会战胜一部分人 悲哀)。
Java 线程模型提供了开发者很方便的并发开发,并发展到javaEE的Web,使用Jsp/Serlvet封装多线程,避免一般软件开发者涉及过于复杂的线程编 程,当我们开发一个Web应用时,部署到Tomcat/Jetty/JBoss服务器上,如果某个时刻有多个用户同时对这个Web应用发出请求,那么服务 器将分派多个线程分别接受处理这些并发请求。这实际上已经是一个多用户并发系统,但是CPU处理并发请求任务时,由于是一个CPU,因此实际上内核是顺序 执行的,现在两个CPU多核机器已经开始普遍,如何发挥多核CPU的并行计算模式呢?
这就要对以往计算模式进行颠覆性的修改,并行计算 (parallel computation)这个概念的意思应该这样定义:在单台PC机中可以跨多核CPU运行,部署到多台PC机中,能够跨越多台服务器云计算。这样的伸缩 性非常类似无所不能的孙悟空了,这样的并行计算模式才是真正可伸缩的Scalable!
而目前唯有Java最有希望做到这点,Java只要补上微结构多核并行运行这一课,而Scala Clojure 以及Erlang要补集群 云计算这一课,这也是Scala非常靠近Java一个原因。
伟大并行计算专家Doug Lea的 Java fork/join framework为java这趟补课提供了及时雨,下面这段代码展示java并行计算方式:
import jsr166y.forkjoin.*;
class Fib extends RecursiveTask<Integer> {
static final int threshold = 10;
volatile int number;
Fib(int n) { number = n; }
public Integer compute () {
int n = number;
if (n <= threshold)
return sequentialFib(n);
else {
Fib f1 = new Fib(n - 1);
f1.fork();
Fib f2 = new Fib(n - 2);
return f2.forkJoin() + f1.join();
}
}
public static void main(String[] args) {
try {
int groupSize = 2; // number of CPUs
ForkJoinPool group =
new ForkJoinPool(groupSize);
Fib f = new Fib(40);
Integer result =group.invoke(f);
System.out.println(“Fibonacci Number: “ + result);
}
catch (Exception ex) {}
}
int sequentialFib(int n) {
if (n <= 1) return n;
else return sequentialFib(n-1) + sequentialFib(n-2);
}
}
fork/join framework将被整合进入JDK 7版本。
当然,新的语言有更方便简洁的实现,Scala 或 Clojure也许成为替代ROR/Groovy的明日之星,
或者这两个语言有各自的细分市场。在未来某个时刻,也许应该死亡的是PHP/ROR。
多核时代开启了软件编程新时代,我们面临更多挑战和创新,好的工具和平台可以帮助我们更好地进入新时代。
参考文章:
Is Scala or Clojure poised for stardom?
http://www.nofluffjuststuff.com/blog/andrew_glover/2008/10/is_scala_or_clojure_poised_for_stardom_.html
Guest View: Java + multicore = good news
http://www.sdtimes.com/link/32943
- 多核并行计算时代的来临
- 多核并行计算时代的来临
- 多核时代的移动开发(二)-水煮并行计算
- Erlang的并行编程时代即将来临
- JDK 7 中的 Fork/Join 模式 轻松实现多核时代的并行计算
- JDK 7 中的 Fork/Join 模式轻松实现多核时代的并行计算
- JDK 7 中的 Fork/Join 模式 轻松实现多核时代的并行计算
- 云计算时代来临
- 面向多核的数值计算:NAG多核并行算法库
- Python 多核并行计算
- 多核时代的并行编程模型应该是什么样子
- 云计算时代来临:微软的下一个十年何去何从
- 通用计算时代来临 论CUDA与OpenCL的异同
- 通用计算时代来临 论CUDA与OpenCL的异同
- 通用计算时代来临 论CUDA与OpenCL的异同
- 新时代的来临
- HTML5时代的来临
- Linux 时代的来临
- c++多线程学习7信号
- 让内网MOSS门户也用域名访问
- 围一圈报数...
- 数据更新-数据约束-MSSQL版本
- VC字符类型转换
- 多核并行计算时代的来临
- 写前台控件时的一个有趣的问题
- 圆角图片样式在线生成工具
- PHP调用MS SQL 存储过程
- 美工之家
- iphone-CoreGraphics切割图片
- oa试用地址
- Servlet和Filter的url匹配以及url-pattern详解
- xp_cmdshell的内容