UPMLIB:优化OpenMP程序内存性能的运行时系统
1. 引言
可扩展共享内存多处理器架构逐渐趋向于一种通用模型,其中配备通用微处理器和内存的节点通过快速网络连接,并借助额外硬件支持为程序员提供共享地址空间的通信抽象。同时,可扩展并行计算机的高级编程模型也逐渐收敛于少数标准,主要代表了消息传递和共享内存这两种不同通信抽象的编程方法,MPI和OpenMP是这两种方法中最流行的代表。
近期,关于可扩展共享内存多处理器的首选编程模型存在大量讨论。像SGI Origin2000这类当代系统,通过供应商提供的定制运行时系统,同时支持基于消息传递和共享内存的编程模型。不过,性能经验表明,使用MPI实现的并行程序通常比使用OpenMP实现的相同程序性能更好,尤其是对于大型工业代码。
OpenMP在可扩展共享内存多处理器上面临的最突出问题是内存访问延迟的非均匀性(NUMA)。尽管共享内存通信抽象对程序员隐藏了数据分布细节,但程序对操作系统的页面放置策略非常敏感。糟糕的页面放置方案可能会增加远程内存访问的次数,而在先进系统中,远程内存访问的成本是本地内存访问的2到10倍。因此,确保线程和数据在系统节点中对齐,使每个线程与它更频繁访问的数据位于同一节点至关重要。
然而,要使用普通的共享内存编程模型实现这一目标,程序员必须了解操作系统的页面放置策略,要么修改程序以使其内存引用模式适应系统策略,要么绕过操作系统手动编写定制的页面放置方案。这两种方法都会破坏共享内存编程模型的简单性,并影响其在不同平台上的可移植性。目前,共享内存多处理器的供应商也面临是否应在OpenMP中引入数据分布指令的困境。
为了解决这些问题,本文提出了UPMLIB(用户级页面迁移库),这是
超级会员免费看
订阅专栏 解锁全文
2826

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



