[发明专利]一种多核多线程环境下NUMA感知的同步方法有效
申请号: | 201510240609.0 | 申请日: | 2015-05-13 |
公开(公告)号: | CN104834505B | 公开(公告)日: | 2017-04-26 |
发明(设计)人: | 吴松;金海;张俊 | 申请(专利权)人: | 华中科技大学 |
主分类号: | G06F9/38 | 分类号: | G06F9/38 |
代理公司: | 华中科技大学专利中心42201 | 代理人: | 曹葆青 |
地址: | 430074 湖北*** | 国省代码: | 湖北;42 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 多核 多线程 环境 numa 感知 同步 方法 | ||
技术领域
本发明属于并行计算领域,更具体地,涉及一种多核多线程环境下NUMA感知的同步方法。
背景技术
在过去的几十年里,多核技术的巨大进步使得并行编程变得非常流行,极大的提高了应用程序的性能。然而对于那些包含大量串行部分代码的应用程序,性能并没有得到相应的提高,因为串行部分无法被并行化。串行部分一般包含可以被多个线程访问的共享资源,因而为了数据安全,这部分代码必须以互斥的方式执行。根据阿姆达尔定律,任何应用程序在并行化后能够加速的程度取决于串行部分和并行部分的比例。因此,在并行编程领域,一个高效的同步机制扮演者非常重要的角色,特别是对于需要大量同步操作的应用程序。
随着计算机处理器核心数目的日益增加,主流计算机处理器厂商已经从传统的基于总线的架构迅速转向NUMA以及cache coherent NUMA(ccNUMA)架构。NUMA架构由多个互联的节点组成,每个节点包含独立的本地内存和若干个核,每一个核有自己的私有缓存,同一个节点内的多个核共享一个最后一级缓存(LLC)。NUMA架构中,如果线程访问的数据没有在本地内存(包括这个NUMA节点内所有核的私有cache以及所有核共享的LLC)命中,将会导致跨NUMA节点的远程内存访问(RMR)和由于维持NUMA节点间的数据一致性而导致的大量跨节点通信,这个对于ccNUMA机器来说性能损失的代价是非常昂贵的。处理器核访问本地内存,特别是本地缓存的速度比访问其他NUMA节点的远端内存速度快好几倍。所有这些因素使得设计一个高 效的NUMA感知的同步机制变得非常复杂。
基于队列的思想来设计同步方法是一个被广泛使用的策略。通过让线程在一个队列里面排队,每个线程在本地自旋,可以一定程度上减少整体上为维持数据一致性而导致的缓存一致性通信开销,但是该方法在NUMA架构上却不能很好的工作,因为访问共享资源的线程可能交替来自于不同的NUMA节点,从而引起大量的远程内存引用以及跨NUMA节点间的通信,而这些都会严重影响应用程序的性能。combining技术是另外一种设计同步方法的策略,它可以有效减少私有缓存的丢失率,但是无法减少为维护数据一致性而导致的NUMA节点间通信,进来带来很大的性能损失。分层锁的设计策略是用来设计NUMA感知的同步方法的,但是该策略的挑战在于如何保证访问共享资源的权限停留在一个NUMA节点内合适的时间段。除了上面提到的问题与缺陷之外,另外一个非常重要的问题是这些方法策略并没有考虑到共享资源的访问特性,当应用程序以分散的模式来访问共享资源时会使得上述问题进一步恶化,进而带来更严重的性能下降问题。
本发明中,节点指NUMA节点,结点均指线程的同步请求结点。
发明内容
针对现有技术的以上缺陷或改进需求,本发明提供了一种多核多线程环境下的NUMA感知(aware)的同步方法,解决在共享资源的访问模式较为分散的情况下,多个NUMA节点之间的跨节点通信和远程内存访问的开销较大而导致的性能下降的技术问题。
为实现上述目的,本发明提出了一种用于在多核多线程环境下的NUMA感知的同步方法,首先对本发明的术语进行解释和说明:
宿主NUMA节点:在本发明中,线程所访问的共享数据要尽可能地保存在某一个特定的NUMA节点内的cache中,本发明定义该NUMA节点为宿主NUMA节点,在本发明中宿主NUMA节点编号初始化为-1。
combiner线程:获得访问共享资源权限的线程,其在执行自己的同步 请求后,还帮助其他线程执行它们的同步请求,本发明定义该线程为combiner线程。本发明内combiner线程以及其他所有线程都是通过调用pthread线程库的pthread_create(pthread_t*thread,const pthread_attr_t*attr,void*(*start_routine)(void*),void*arg)函数创建的。
SWAP操作:以SWAP(a,b)为例,该操作将a的值设置为b,并且返回a之前的值,同时该操作是一个原子操作。SWAP操作通过调用gcc编译器的内建函数__sync_lock_test_and_set(type*ptr,type value)来实现。
回溯位置:在本发明中,指遍历同步请求链表的起始位置。
本发明基于linux编程环境,包括以下步骤:
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于华中科技大学,未经华中科技大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201510240609.0/2.html,转载请声明来源钻瓜专利网。