并行编程的高级方法与性能分析
1. 并行编程的进一步方法
1.1 全局数组
全局数组(GA)方法是为支持科学计算应用程序的程序设计而开发的,这些应用程序主要使用基于数组的数据结构,如向量或矩阵。GA方法以库的形式提供,具有适用于不同并行平台的C、C++和Fortran接口。
GA方法基于全局地址空间,全局数组可以存储在其中,每个进程与全局数组的一个逻辑块相关联,访问该块的速度比访问其他块更快。GA库为共享地址空间提供基本操作(如put、get、scatter、gather),以及用于访问全局数组的原子操作和锁机制。进程之间的数据交换可以通过全局数组进行,也可以使用像MPI这样的消息传递库。化学模拟是GA方法的一个重要应用领域。
1.2 事务性内存
当线程并发访问共享数据时,必须进行同步。避免竞态条件的标准方法是使用互斥变量或临界区。典型的编程风格如下:
- 程序员识别程序中的临界区,并用互斥变量保护它们。进入临界区时锁定互斥变量,离开时解锁。
- 这种锁机制保证一次只有一个线程进入临界区,实现互斥。
使用锁机制会导致临界区的执行顺序化,这可能会导致性能问题,临界区可能成为瓶颈。特别是在使用大量线程且临界区较大、执行时间较长时,通常会出现可扩展性问题。
对于像典型多核架构这样只有几个核心的小型并行系统,这个问题并不重要,因为涉及的线程很少。但对于未来具有大量核心的多核系统的大型并行系统,必须仔细考虑这个问题,并显著降低临界区的粒度。此外,使用锁机制时,程序员必须严格遵循约定,明确保护所有可能发生共享数据访问冲突的程序点,以保证程序行为正确。如果程序员遗漏了一个应该锁定的程序点
超级会员免费看
订阅专栏 解锁全文
2579

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



