多内核技术的机遇与挑战

时间:2022-07-17 04:57:24

多内核技术的机遇与挑战

今天非常荣幸有机会分享我对多核技术对软件方面挑战的想法,希望可以对大家有所帮助。

首先讨论一个问题:多内核处理器,到底和以前多处理器系统有什么不同?这些不同对我们提出哪些新的挑战?

多内核处理器新在哪里?以前很早就有共享内存的多处理器系统。现在部分多内核处理器两个内核可以共享二级缓存,实际上共享缓存在早期多处理器系统里面早就有了。另外就是非一致性的内存访问开销,在过去的系统里也早有关所体现。

我认为多内核处理器更重要的特点是多内核处理器在经济上的意义。首先是系统价格比原来便宜多。用两个双核处理器组建一个四个处理器核心的服务器的价格大概是1万元左右,但是过去一个四个处理器核心的系统至少5万元以上才能获得。这样的特点造成拥有多核处理器系统的用户大大增加。

回顾一下并行编程模型的现状。有相关需求的用户有三类。一类是科学计算、高性能计算用户,他们在并行编程的路上走十几年了,会用MPI或OpenMP来写程序;第二类是服务器用户,服务器有天然的并行性,大多采用并线程的方法;第三类是桌面系统用户,除了少数应用,比如图象处理或3D制作,大部分程序都是串行的。这一类的应用程序员不像第一类、第三类是至少有并行程序开发的经验和概念的,对于他们来讲,并行世界对他们来说是一个新的世界,带来很大的挑战。流行的OpenMP编程模式,对于大多数桌面系统编程员来说过于复杂,所以对新的高效并行程序设计语言需求迫切。

在这个领域里面,为了减轻并行开发模型的复杂性,提高并行开发的效率,已经做了的一些有代表性的工作包括:Transactional Memory;X10、Fortress;MPI、OpenMP在现有多内核系统上优化,自动并行化的工作;函数语言,数据流语言,以及我提的领域语言和SINGLE Assignment语言;其他有意义的探索。

我们要访问共享资源的时候要有锁,加锁和解锁的方式有差错,就容易造成死锁。要正确用锁很难的。不仅要按照ID顺序判断加锁的顺序,同时锁不能加太多,也不能加太少,加多了程序正确但是性能太差,加少了,程序不正确。所以加锁对一般程序员是非常大的挑战。Transactional Memory的基本思想是让你随便访问,但是监测到一个资源被两个线程访问,就让体系重新运行。Transactional Memory在我个人的看法是目前并行编程里面相对最有前途,也是最近的研究热点,这几年看顶级程序设计的会议都可以看到与Transactional Memory相关的内容。但是它有一个很大的特点,只有在硬件支持情况下才能高效完成,现有的软件都无法做到高效。

X10是IBM最近在高性能计算计划里提出新的编程语言,它对多内核系统与集群系统提供统一的支持。第二种语言设计注重可移植性和安全性,它取了JAVA一个子集又做了扩展,JAVA语言具有高生产率、可移植性、成熟、安全。X10希望面向主流JAVA/C++的语言。

刚才提到这些都是新的东西,不是马上可以看见用的,现在可以用的就是MPI和OpenMP这样的成熟模型。多内核系统提供了内核之间快速通信的机制,而MPI程序模型是向另外一个进程发一个消息,会从发送方缓冲区发送到复制方的缓冲区,这样的编程模型完全没有发挥多内核提供的特性。现有MPI程序可以有效在多内核的系统上执行,但是确实有优化的空间。

上一篇:销售困局的另一个视角 下一篇:大型企业建立专属平台等