RISC-V 中的 LLVM 指令调度
LLVM Instruction Scheduling in RISC-V
我正在研究用于 RISC-V 后端的 LLVM 中的指令调度。我知道有两种调度方式(ScheduleDAGRRList 和 MachineScheduler)。从调试日志我可以 RISC-V 使用 ScheduleDAGRRList 方法。
MachineScheduler 比 ScheduleDAGRRList 好吗?如果是这样,我如何为 RISC-V 启用 MachineScheduler ?
我尝试了 llc -enable-misched file.ll
,但没有成功。
RISC-V 后端在 LLVM 版本 10.0 中添加了对机器调度程序 (MISched) 的支持。
https://releases.llvm.org/10.0.0/docs/ReleaseNotes.html
RISCVSchedRocket64.td 中的 TableGen SchedMachineModel 描述将其描述为有序处理器。
// Rocket machine model for scheduling and other instruction cost heuristics.
def Rocket64Model : SchedMachineModel {
let MicroOpBufferSize = 0; // Explicitly set to zero since Rocket is in-order.
let IssueWidth = 1; // 1 micro-ops are dispatched per cycle.
let LoadLatency = 3;
let MispredictPenalty = 3;
}
您可以通过以下方式为 rocket-rv64 启用机器调度:
-O3 -mllvm -enable-misched -mllvm -enable-post-misched -mcpu=rocket-rv64
我正在研究用于 RISC-V 后端的 LLVM 中的指令调度。我知道有两种调度方式(ScheduleDAGRRList 和 MachineScheduler)。从调试日志我可以 RISC-V 使用 ScheduleDAGRRList 方法。
MachineScheduler 比 ScheduleDAGRRList 好吗?如果是这样,我如何为 RISC-V 启用 MachineScheduler ?
我尝试了 llc -enable-misched file.ll
,但没有成功。
RISC-V 后端在 LLVM 版本 10.0 中添加了对机器调度程序 (MISched) 的支持。
https://releases.llvm.org/10.0.0/docs/ReleaseNotes.html
RISCVSchedRocket64.td 中的 TableGen SchedMachineModel 描述将其描述为有序处理器。
// Rocket machine model for scheduling and other instruction cost heuristics.
def Rocket64Model : SchedMachineModel {
let MicroOpBufferSize = 0; // Explicitly set to zero since Rocket is in-order.
let IssueWidth = 1; // 1 micro-ops are dispatched per cycle.
let LoadLatency = 3;
let MispredictPenalty = 3;
}
您可以通过以下方式为 rocket-rv64 启用机器调度:
-O3 -mllvm -enable-misched -mllvm -enable-post-misched -mcpu=rocket-rv64