Я хочу проверить, как работают разные автоматические планировщики. Я знаю, что есть 3 разных автоматических планировщика: «Mullapudi2016» (автоматический планировщик по умолчанию), «Adams2019» и «Li2018». "Adams2019" находится в apps/autoscheduler (https://github.com/halide/Halide) а «Li2018» находится в градиенте_autoscheduler. Но как я могу использовать его на конкретном трубопроводе (например, Харрисе)? Я попытался добавить новую карту в Pipeline.cpp, например:
std::map<std::string, AutoSchedulerFn> &Pipeline::get_autoscheduler_map() {
static std::map<std::string, AutoSchedulerFn> autoschedulers = {
{ "Mullapudi2016", auto_schedule_Mullapudi2016 },
{ "Admas2019", auto_schedule_Adams2019 }
};
return autoschedulers;
}
Определение «auto_schedule_Adams2019» похоже на «auto_schedule_Mullapudi2016», но просто заменяет «generate_schedules» на «generate_schedule», который уже определен в «apps/autoscheduler/AutoSchedule.cpp».
void Pipeline::auto_schedule_Mullapudi2016(Pipeline pipeline, const Target &target,
const MachineParams &arch_params, AutoSchedulerResults *outputs) {
AutoSchedulerResults results;
results.target = target;
results.machine_params_string = arch_params.to_string();
user_assert(target.arch == Target::X86 || target.arch == Target::ARM ||
target.arch == Target::POWERPC || target.arch == Target::MIPS)
<< "The Mullapudi2016 autoscheduler is currently supported only on these architectures." << (int)target.arch;
results.scheduler_name = "Mullapudi2016";
results.schedule_source = generate_schedules(pipeline.contents->outputs, target, arch_params);
// this autoscheduler has no featurization
*outputs = results;
}
void Pipeline::auto_schedule_Adams2019(Pipeline pipeline, const Target &target,
const MachineParams &arch_params, AutoSchedulerResults *outputs) {
AutoSchedulerResults results;
results.target = target;
results.machine_params_string = arch_params.to_string();
user_assert(target.arch == Target::X86 || target.arch == Target::ARM ||
target.arch == Target::POWERPC || target.arch == Target::MIPS)
<< "The Mullapudi2016 autoscheduler is currently supported only on these architectures." << (int)target.arch;
results.scheduler_name = "Adams2019";
results.schedule_source = generate_schedule(pipeline.contents->outputs, target, arch_params);
// this autoscheduler has no featurization
*outputs = results;
}
В идеале, когда я вызываю auto_schedule в harris, мне просто нужно указать имя планировщика. Но как связать проект "harris" с автопланировщиком "Adams2019" в "apps/autoscheduler"? Я думаю, что мне нужна "auto_schedule.dll", которая компилируется программой auto_schedule.
Но, к сожалению, я не знаю, как подключить его к моему проекту. У кого-нибудь есть такая же проблема, или кто-то знает, как использовать разные автопланировщики?