围栏指令是一种粗粒度机制,用于强制乱序管道中的指令执行顺序。在只有一条指令必须等待另一条指令完成的情况下,它们是多余的。例如,在非易失性内存(NVM)系统中执行undo日志记录时就是这种情况:虽然变量的更新需要等待,直到对应的undo日志条目被持久化,但所有其他指令都可以重新排序。不幸的是,目前的isa没有提供一种方法来描述两个没有寄存器或内存依赖关系的指令之间的这种执行依赖关系。因此,程序员必须设置栅栏,这将不必要地序列化许多不相关的指令。为了弥补这个限制,我们提出了一个ISA扩展,它能够描述这些执行依赖关系。我们称之为执行依赖扩展(EDE),并将其添加到Arm的AArch64 ISA中。我们还介绍了EDE的两种硬件实现,它们在管道的不同阶段强制执行依赖关系:一个在问题队列(IQ)中,另一个在写缓冲区(WB)中。我们在一个模拟器中实现了IQ和WB,并用几个NVM应用程序对它们进行了测试。总的来说,通过使用带有IQ和WB的EDE而不是fence,我们分别获得了18%和26%的平均工作负载速度
Thomas Shull*, Ilias Vougioukas†,Nikos Nikoleris†,Wendy Elsasser†,Josep Torrellas‡
*甲骨文实验室§†Arm研究‡伊利诺伊大学香槟分校
点击在这里获取纸张。
留下回复