首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用不同的自动调度程序来调度管道?

如何使用不同的自动调度程序来调度管道?
EN

Stack Overflow用户
提问于 2019-12-05 16:02:21
回答 1查看 342关注 0票数 1

我想测试不同的自动调度程序是如何工作的。我知道有3种不同的自动调度程序:"Mullapudi2016“(默认的自动调度程序)、"Adams2019”和"Li2018“。"Adams2019“位于app/autoscheduler (https://github.com/halide/Halide)中,"Li2018”位于gradient_autoscheduler中。但我怎样才能在混凝土管道上使用(例如哈里斯)?我试图在Pipeline.cpp中添加一个新地图,如下所示:

代码语言:javascript
复制
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",后者已经在“app/autoscheduler/AutoSchedule.cpp”中定义。

代码语言:javascript
复制
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“项目与”app/autoscheduler“中的自动调度程序"Adams2019”连接起来呢?我想我需要"auto_schedule.dll",它是由auto_schedule编译的。

但不幸的是,我不知道如何将它与我的项目连接起来。是有人有同样的问题,还是有人知道如何使用不同的自动调度程序?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-06 00:21:49

将-p标志传递给生成器二进制文件将使其加载插件。李和亚当斯的自动切割机是作为插件构建的。生成器二进制的-s标志从已加载的二进制文件中选择要使用的自动代码程序。穆拉普迪自动编程程序不是一个插件,而是内置的,正如你所说的。

所有这些工作都是在linux和mac上完成的,所以我不确定是否所有的构建系统都在windows上工作。如果你对makefile很满意,看一看应用程序/autoscheduler中的“make演示”,看看事情是如何工作的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59199003

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档