多核系统的趋势继续给系统设计人员和应用程序设计人员施加压力,来更好地利用多核计算核心。

操作系统的设计者必须编写使用多个处理核心的调度算法来允许像图4.4中那样的并行执行。对于应用程序的程序员来说,挑战在于修改现有的程序以及设计使用多线程的新程序。

一般来说,在领域在多核系统编程中存在五个挑战:

  • 辨别任务(Identifying tasks):这包括检查应用程序,以找到可以划分为单独的并发任务的区域。理想情况下,任务是相互独立的,因此可以并行的在单独的核心上运行。
  • 平衡(Balance):在辨别可以并行运行的任务时,程序员还必须确保任务执行均等价值的工作。在某些情况下,某个任务可能不会像其他任务那样对整个过程贡献多少价值。可能并不值得使用单独的执行核心来运行该任务。
  • 数据分隔(Data splitting):就像应用程序被划分为独立的任务一样,由任务访问和操作的数据必须在不同的内核上运行。
  • 数据依赖( Data dependency):任务访问的数据必须检查两个或多个任务之间的依赖关系。当一个任务依赖于另一个任务的数据时,程序员必须确保任务的执行是同步的,以适应数据依赖。我们在第5章中了解了这些策略。
  • 测试和debug:当一个程序在多个核心上并行运行时,可能会有许多不同的执行路径。测试和调试这样的并发程序本质上比测试和调试单线程应用程序更困难。

由于这些挑战,许多软件开发人员认为,多核系统的出现将需要一种全新的方法来设计未来的软件系统。(同样,许多计算机科学教育者认为,软件开发必须加强对并行编程的重视。)

results matching ""

    No results matching ""