提出的多核系统下高效的持久化栅栏LB++,能够实现BEP模型和批量模式的BSP模型。LB++解决两种epoch冲突问题1线程间的冲突:一个线程读写另一个线程已经修改过的高速缓存行,并且该行所属的epoch还未完成持久化2线程内部的冲突:同一个线程内,较新的epoch写一个已经被修改过的高速缓存行,并且该行所属的较早的epoch还未完成持久化。对于线程间的冲突,LB++新增硬件支持IDT(Inter-thread Dependence Tracking)机制,IDT寄存器能记录冲突双方,把依赖关系留到线下解决,避免了被依赖的epoch必须在关键路径上完成持久化的瓶颈。对于线程内部的冲突,LB++通过FP(Proactive Flushing)机制主动刷新已经完成的epoch到断电保护域,不是被动的等到高速缓存行替换时再执行刷新,减少当前未完成持久化的epoch,因此能有效地减少两种冲突发生的概率,该工作由硬件的刷新引擎和epoch仲裁器负责。Epoch仲裁器也帮助实现支持Multi-banked LLC的epoch刷新协议。LB++通过拆分被依赖的epoch的方式解决了epoch死锁的问题,死锁的产生的原因是分属两个线程的未完成持久化的epoch相互依赖,都需要等待对方先完成持久化才能继续。LB++支持BEP模型需要软件调用持久化栅栏指令,支持批量的BSP模型则不需要,硬件会动态的划分epoch,所谓的批量就是指以epoch为粒度实现BSP模型,但需要额外的硬件或软件提供undo日志等机制保证epoch持久化的原子性,类似于BulkSC
领书计划详情