多处理器编程的挑战与应对
1. 多处理器编程的背景与挑战
计算机行业正经历着重大变革,芯片制造商暂时放弃了提升处理器运行速度的尝试。尽管摩尔定律依然有效,芯片上能容纳的晶体管数量逐年增加,但因过热问题,时钟速度难以提升。于是,制造商转向了“多核”架构,多个处理器(核心)通过共享硬件缓存直接通信,利用并行性使计算更高效。
多处理器架构的普及对软件开发产生了深远影响。过去,技术进步主要体现在时钟速度提升,软件会自动“加速”。如今,技术进步意味着并行性增加而非时钟速度提升,如何利用并行性成为现代计算机科学的重大挑战。
多处理器编程在各个规模的系统中都存在挑战。小到单个芯片内的处理器需协调对共享内存位置的访问,大到超级计算机中的处理器要协调数据路由。现代计算机系统本质上是异步的,活动可能因中断、抢占、缓存未命中、故障等事件毫无预警地暂停或延迟,且这些延迟不可预测,规模差异巨大,如缓存未命中可能使处理器延迟不到十条指令,页面错误可能延迟数百万条指令,操作系统抢占则可能延迟数亿条指令。
2. 多处理器编程的两个方向
2.1 原理方向
原理方向聚焦于可计算性,即在异步并发环境中能计算什么。采用理想化的计算模型,多个并发线程操作一组共享对象,线程对对象的操作序列构成并发程序或并发算法,这与 Java、C# 或 C++ 线程包的模型本质相同。
令人惊讶的是,有些易于定义的共享对象无法通过任何并发算法实现。因此,在编写多处理器程序前,了解哪些不可行至关重要。许多多处理器编程中遇到的问题源于计算模型的基本限制,所以掌握并发共享内存可计算性的基础知识是必要步骤。相关内容会带领我们快速了解异步可计算性,揭示各种可计算性
超级会员免费看
订阅专栏 解锁全文
10万+

被折叠的 条评论
为什么被折叠?



