一种numa架构下平衡多线程间访存延迟的调度系统及方法

文档序号:9921912阅读:696来源:国知局
一种numa架构下平衡多线程间访存延迟的调度系统及方法
【技术领域】
[0001]本发明属于计算机体系结构下的多线程性能优化领域,更具体的,涉及一种NUMA架构下平衡多线程间访存延迟的调度系统及方法。
【背景技术】
[0002]非一致访存(NUMA)架构是目前流行的商用服务器架构之一,它采用了分布式存储器模式,且其中所有节点的处理器都可以访问全部的物理内存,易于管理,可扩充性好,因此得到了广泛的应用。
[0003]在NUMA架构中,每个CPU访问的内存可以分为两种:与CPU在同一个节点的内存称为本地内存,访问延迟非常低;与CPU在不同节点上的内存叫做远端内存,对于远端内存的访问,CPU需要通过节点互联的方式进行,所以其访问延迟要比本地内存的访问延迟长。这种访存延迟的不一致性是NUMA架构的最主要特点,但它却给程序的调度和运行带来了困难,如果没有得到合理的线程以及数据分配,那么很有可能导致该程序中所有的访存操作都成为远端访存,从而经历较大的访存延迟,程序运行时间大大延长,使程序的性能大打折扣。当然,这些由于远端访存造成的延迟可以通过系统仔细地将程序的线程和它所用的数据协同调度进一步减少或消除。
[0004]针对程序在NUMA架构下运行的特殊性,目前已经提出了一些NUMA感知的调度算法。大部分NUMA感知的调度算法仅是针对单个线程,或者针对多个线程时仅单纯地将各个线程独立开来考虑,并没有考虑到多线程并行时的同步问题。
[0005]对于运行过程中存在线程同步操作的多线程程序,在NUMA架构下运行时需要考虑各个线程的运行速度问题,如果在需要达到同步的线程中存在一些线程,由于执行的远端访存较多,导致运行速度慢,那么该线程成为了拖累程序运行速度的关键线程,这个时候为了减少其他线程远端访存所做的工作,其对于最终程序所表现出来的整体性能并不能有很好的提高。现有的针对NUMA架构下程序运行性能的优化工具中,缺乏针对多线程之间访存延迟均衡这一问题的优化方式。相应地,本领域亟需寻找一种适用于NUMA架构下平衡多线程访存延迟的方法。

【发明内容】

[0006]针对现有技术的以上缺陷或不足,本发明提出一种NUMA架构下平衡多线程间访存延迟的调度系统及方法。利用本发明中的系统及方法,相应能够有效解决由于NUMA架构下访存行为的非一致性导致的多线程程序各线程间访存延迟的不一致问题,显著提高了 NUMA架构下分析调度的实时性,大大优化了 NUMA架构下程序运行性能。
[0007]为实现上述目的,本发明一种NUMA架构下平衡多线程间访存延迟的调度系统,其特征在于,所述系统包括检测模块、采样模块、分析模块、判断模块和调度模块,其中,
[0008]检测模块,用于探测程序是否进入多线程并行执行区域,还用于在探测程序进入多线程并行执行区域后,启动采样模块;
[0009]采样模块,用于对多线程程序运行过程中每个线程的访存行为进行采样,并将采样过程中获取的访存信息保存;
[0010]分析模块,一方面用于根据所述采样模块获取的访存信息,定期对所述多线程程序中各线程的访存延迟不平衡度进行评估,还用于针对发生不平衡现象的多线程程序进行访存行为分析,此外,所述分析模块还用于根据所述采样模块获取的访存信息进行访存规律分析;
[0011]判断模块,用于根据所述访存延迟不平衡度判断是否发生多线程间访存延迟不平衡现象,同时,还用于在访存延迟不平衡现象发生时进一步判断线程访问变量是否仅由一个线程访问、线程访问变量与访问该变量的线程是否处于同一个节点及线程访问变量大小是否小于第二阈值Size,此外,所述判断模块,还用于判断程序多线程并行执行的区域是否结束;
[0012]调度模块,用于根据所述分析模块的访存行为分析和访问规律分析,及判断模块的判断结果对远端访存的线程访问变量进行迀移调度至线程所在节点或使用交错存放将其平均分配到各节点上。
[0013]作为进一步优选的,所述访存信息包括发起访存行为的线程ID,访存行为的目的地址,完成访存行为所耗费的时钟周期数和访存行为的类型。
[0014]作为进一步优选的,所述访存延迟不平衡度具体为:
[001 5] ξτ= I DT-Davg I /Davg
[0016]其中,ξτ为线程T的访存延迟不平衡度,Dt为线程T的平均访存延迟,Davg为所有线程的平均访存延迟。
[0017]作为进一步优选的,所述访存行为分析具体包括:
[0018]根据所述采样模块获取的访存信息,估计每个线程访问变量的线程平均访存延迟,并依次将线程平均访存延迟最大的线程访问变量交由判断模块进行处理。
[0019]作为进一步优选的,所述访问规律分析具体为:观察多线程程序中每个线程访问变量中是否没有被多个线程共同访问的线程访问变量子块。
[0020]作为进一步优选的,所述采样模块还用于保存采样过程中为线程访问数据分配的内存大小及分配的内存地址。
[0021]按照本发明的另一个方面,提出了一种基于上述系统的NUMA架构下平衡多线程间访存延迟调度系统的调度方法,其特征在于,包括以下步骤:
[0022](I)检测模块检测程序是否进入多线程并行执行区域,一旦发现程序处于多线程并行执行区域,立即启动采样模块;
[0023](2)采样模块持续对程序的多线程访存行为进行采样,并将采样获取的访存信息根据线程ID进行分类并保存,根据访存行为的时间顺序为每个线程建立一个访存事件流,并通过分析模块不断更新计算每个线程的平均访存延迟;
[0024](3)分析模块定期对各线程的访存延迟不平衡度进行评估;
[0025](4)通过判断模块判断各线程的访存延迟不平衡度是否大于第一阈值Threshhold;若是,则跳转至步骤(5),否则,继续执行步骤(3);
[0026](5)分析模块对多线程程序进行访存行为分析,根据估计的每个线程访问变量的线程平均访存延迟,选取线程平均访存延迟最大的线程访问变量,并将该线程访问变量交由判断模块进行处理;
[0027](6)判断模块判断所述线程访问变量是否仅由一个线程访问,若是,则跳转至步骤
(7),否则跳转至步骤(8)。
[0028](7)判断模块进一步判断所述线程访问变量与访问该变量的线程是否处于同一个节点,若是,则返回步骤(5)分析模块依次选取下一个访存延迟最大的线程访问变量进行访存行为分析,否则,调度模块将该线程访问变量迀移至访问该变量的线程所在节点;
[0029](8)判断模块进一步判断所述线程访问变量大小是否小于第二阈值Size,若是,则转入步骤(9),否则转入步骤(1);
[0030](9)将该线程访问变量复制分发到NUMA架构下的各个节点;
[0031](10)分析模块根据所述采样模块获取的访存信息对多线程程序进行访问规律分析,若所述线程访问变量中没有被多个线程共同访问的线程访问变量子块,则转入步骤(10-1),否则转入步骤(10-2);
[0032](10-1)将各线程访问的线程访问变量子块分别存放到各线程所在的节点;
[0033](10-2)通过交错存放将所述线程访问变量平均分配到NAMU架构下的各个节点上;
[0034](11)判断模块判断程序多线程并行执行的区域是否结束,若否,则返回步骤(3)继续执行;否则调度结束。
[0035]作为进一步优选的,所述访存信息包括发起访存行为的线程ID,访存行为的目的地址,完成访存行为所耗费的时钟周期数和访存行为的类型。
[0036]作为进一步优选的,所述访存延迟不平衡度具体为:
[0037]ξτ= I DT-Davg I /Davg
[0038]其中,ξτ为线程T的访存延迟
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1