Open meton-robean opened 5 years ago
将循环分成几大类,包含可以全并行的,含有寄存器依赖的,内存依赖的,动态边界的。根据这个新增两种指令:
所以一个创新点是根据循环的分类,自定义两种指令,其实本质是: 不是简单的新加指令,而是从指令的角度去看待,给指令增加一点新的语义信息,可以看做是一种语义标签,来使得后面的加速硬件可以识别循环内那几条特殊标记的指令,从而调度循环加速。
发掘迭代间的并行. 每个Lane负责某次循环迭代的执行,也就是每个lane需要执行某次迭代内的循环内的指令,类似多核的感觉,实际上每个Lane里面也确实就只有一个核通用CPU一样的ALU。
但是其实这种多核加速的加速比大致取决于核的数目,并不高。 好处是每个lane负责一次迭代,就算循环内有分支啥的条件语句啥的也可以想像普通CPU一样执行.
XLOOP是利用 PyMTL和Pydgin来进行硬件实现和模型仿真
例如 A[ i] = A[i] +A[i-k]
有内存依赖的情况, 某个Lane如果check到在其负责的迭代里面,它需要的那个数在其他lane没有算好送到它这里,那么要终止本次迭代的执行,下一次再重新执行这一次迭代的指令们
Architectural Specialization for Inter-Iteration Loop Dependence Patterns
会议ppt
这个项目没有开源,但是公布了benchmark: https://github.com/cornell-brg/xloops-bmarks
创新点是根据循环的分类,自定义两种指令,其实本质是: 不是简单的新加指令,而是从指令的角度去看待,给指令增加一点新的语义信息,可以看做是一种语义标签,来使得后面的加速硬件可以识别循环内那几条特殊标记的指令,从而调度循环加速。 参考借鉴点是其对各种循环的分类角度 以及 对循环内的某些指令的区分(例如特别区分了循环中用于地址计算的 迭代计算指令 ,标记为addi.xi)