共享内存编程:SCI 集群的技术探索与实践
1. 共享内存编程接口 SMI
在并行计算领域,共享内存编程接口 SMI 是为各类提供共享内存的并行机器而开发的,尤其侧重于 SCI 互联的集群系统。
1.1 数据复制与修改
当数据被复制时,允许进程进行本地修改是有意义的,前提是之后能够将这些复制内容合并为一个一致的视图。例如,若区域包含用于累加操作的数组,可通过对所有复制实例求和来重新建立一致视图。SMI 提供了多个此类操作符,可通过参数 CombineMode 指定,如针对不同数据类型的 max 和 add 操作。
1.2 同步机制
为实现进程同步,SMI 提供了互斥锁(mutexes)、屏障(barriers)和进度计数器(progress counters)。这些同步原语通过对读写缓冲区进行适当的无效化/刷新操作,为应用程序程序员提供了易于使用的内存模型,形成的一致性模型通常称为释放一致性。
- 互斥锁 :提供了 SMI_Mutex_init、SMI_Mutex_lock、SMI_Mutex_trylock、SMI_Mutex_unlock 和 SMI_Mutex_destroy 等函数,实现常见的语义。
- 屏障 :调用 SMI_Barrier 可执行应用程序范围的屏障操作。
- 进度计数器 :表示一组计数器变量,每个进程有一个。每个进程可以增加自己的计数器(SMI_Increment_PC),并等待单个其他进程或所有其他进程的计数器达到某个值(SMI_Wait_individual_P