gpt4 book ai didi

c++ - 在 Halide 管道中访问函数

转载 作者:行者123 更新时间:2023-11-28 05:39:34 24 4
gpt4 key购买 nike

我有一个 Halide 管道,我想在上面尝试几个时间表。为此,我想创建一个包含优化的单独文件,然后在运行时将它们应用于给定的 Func,这样我就可以自动尝试它们以找到最快的。

我开始编写自己的函数来执行此操作,但对于某些优化(例如 compute_at),这变得相当复杂。 compute_at 将 Func 作为第一个参数。有没有一种方法可以访问管道中的函数,而无需保留所有函数的列表,然后将此列表传递给我的函数?我知道由于 Halide 的设计方式,这可能根本不可能。

最佳答案

IR 可以通过名称找到 Func,也可以将它们藏在 map 中以供将来引用。然而,这只是解决了命名的低级机制。问题是名称本身成为接口(interface)的一部分,并且调度仍然特定于代码结构的低级细节。 (并且还需要 Var 名称,这些通常更容易使用。)

在这一点上,最好定义一个包含调度例程可以依赖的信息的结构,并在构建 IR 时填充它。然后可以将此结构传递给 C++ 函数来进行调度。可以抽象出调度的公共(public)部分等。对于复杂的情况,我们经常使用 C++ 循环等将调度 block 应用于一组 Func,即使所有 IR 都是在单个例程中构建和调度的。实际上,该结构封装了算法和调度之间的接口(interface)。

我们正在致力于更好的序列化和反序列化,如果您想将计划写入与 C++ 代码分开的文件中,这将提供另一个切片。但是再一次,您仍然必须知道被调度代码的详细信息才能使其工作。它还涉及使用序列化格式作为编程语言进行调度或开发另一种语言。

目前最有前途的途径是自动启发式调度。 Ravi Teja Mullapudi 等人在 SIGGRAPH 上发表了一篇论文。

关于c++ - 在 Halide 管道中访问函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37456623/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com