多核系统中的编程挑战
向多核系统的趋势持续给系统设计师和应用程序程序员带来压力,要求他们更高效地利用多个计算核心。操作系统的设计者应该编写使用多个处理核心的编程算法,以允许下图所示的并行执行:
图:多核系统上的并行执行
对于应用程序程序员来说,挑战在于将现有程序转换为新的多线程程序。一般来说,多核系统编程中存在五个方面的挑战:
识别任务 - 这涉及检查应用程序以查找可以划分为单独的并发任务的区域。理想情况下,任务彼此独立,因此可以在各个核心上并行运行。
平衡 - 虽然可以识别出可以并行运行的不同任务,但程序员应确保这些任务执行具有同等价值的同等工作量。在某些情况下,特定任务可能对进程的贡献不如其他任务多。使用单独的执行核心来运行该任务可能不值得。
数据分割 - 与将应用程序划分为单独的任务一样,访问和操作任务的数据也应被分割以在单独的核心上运行。
数据依赖性 - 应检查任务访问的数据,以查看两个或多个任务之间是否存在依赖关系。当一个任务依赖于另一个任务的数据时,程序员应确保任务的执行是同步的,以适应数据依赖性。
测试和调试 - 当程序在多个核心上并行运行时,许多不同的执行路径是可能的。测试和调试此类并发程序比测试和调试单线程应用程序要困难得多。
由于这些挑战,许多软件开发人员认为多核系统的出现需要一种全新的软件系统设计方法。
广告