众核结构已经成为现代处理器发展的方向,多线程技术也成为高效利用众核资源的途径。在很多应用领域,具有相同代码段的线程之间的执行路径存在很大的相似性,其访存轨迹也存在一定的规律性,这些特性虽然引起了重视,但一直没有在众核多线程情况下找到合适的解决方案,破坏了这些特性,引发了大量的冗余访存操作。本课题将按同步执行、检测规律、优化设计等三个步骤来探索多线程条件下的众核处理器访存优化方法(1)针对具有相同代码段的多线程,研究核内和核间多线程的同步执行方法,使线程间访存的局部性和规律性得到保持。(2)在同步执行多线程的基础上,检测线程间访存轨迹的相似性和规律性,分别实现核内和核间多线程间的数据预取,提高访存性能。(3)在线程间数据预取的基础上,实现数据的主动推送机制,将预取到的数据继续推送到需要的相关的处理器核内,降低对共享Cache的冗余访问,并提高各级Cache的命中率。
synchronous execution of multi-thread;Memory access trace detection;data prefetch between threads;data-pushing of cache;
本课题首先实现众核多线程并行模拟器dSimu,搭建课题研究平台。通过对同步执行、检测规律、优化设计三方面实现片上多线程冗余访存操作消除,并根据检测的规律实现线程间数据主动推送,降低了共享Cache的冗余访问,并提高Cache的命中率。对于同步执行在Cache的访问路径上增加地址检测装置,为每个活动线程设置一个地址窗口,窗口以线程号进行编号,地址窗口存储一定条数的最近访存地址。并通过轨迹拟合的方法,找到线程间访存轨迹的规律,根据同组线程中的先行访存线程的访存位置,预测后续线程的访存位置。对于检测规律对于核内多线程的情况,一种是同组线程对相同/相近位置的数据进行访问,此时可以根据访存轨迹拟合的结果,防止马上要访问到的数据被替换出Cache;另一种情况是对于线程间操作的不同数据,其地址之间的步长遵循一定规律,根据一个访存位置信息对其他位置上的数据进行推送。对于核间多线程的情况,一般在核内Cache缺失的情况下,才会发生对核间共享Cache的访问,此时采用与核内线程间访存轨迹拟合相似的办法,为核间共享Cache增加访问地址检测逻辑,记录不同处理器对共享Cache访问的地址序列,并找出这些序列间的空间规律性,据此预测相关的访存位置,在共享Cache的层次上实现准确的推送。对于数据推送 1)静态推送策略。静态的推送Cache主要包括两个部分保存数据的实Cache和没有数据的虚Cache块。实Cache和虚Cache都拥有重复使用距离历史域,记录数据用例预测Cache块的重复使用距离。重复使用历史域包含两个子区域空闲计数域,用来记录从上一次访问Cache访问之后的Cache访问次数;重复使用间隔域,可给出从上一次访问到下一次被访问的访问次数预测值。2)动态Cache推送实现。当前应用程序不适合推送Cache时,动态推送Cache能动态配置它的虚拟块,使其变成实Cache块,使用类似LRU的替换策略。对于动态推送Cache可以被配置为两种不同的模式 1.自发推送模式,类似静态Cache推送机制; 2.近似LRU模式,Cache组的虚拟块转化为实Cache块。