首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Halide中的递归函数调用

Halide中的递归函数调用
EN

Stack Overflow用户
提问于 2015-08-03 14:07:49
回答 1查看 387关注 0票数 1

我使用Halide并尝试计算给定二维输入的最大连通单元的大小。我的想法是使用递归函数,但我不知道如何用Halide语言编写它。

参考python脚本和预期结果如下。

代码语言:javascript
复制
import random

N = 4
data = [[0 for i in range(N)] for j in range(N)]
for index in range(N*N):
    data[index/N][index%N] = (random.randint(0,100) & 1)

print "Input"   
for d in data:
    print d

def ret(x, y):
    if x < 0 or y < 0 or x >= N or y >= N:
        return 0
    if data[y][x] == 0:
        return 0

    data[y][x] = 0

    return ret(x, y-1) + ret(x, y+1) + ret(x-1, y) + ret(x+1, y) + 1

result = [[0 for i in range(N)] for j in range(N)]

for y in range(4):
    for x in range(4):
        result[y][x] = ret(x, y)

print "Output"  
for r in result:
    print r


"""
Input
[1, 0, 1, 0]
[0, 0, 1, 1]
[0, 0, 1, 1]
[1, 1, 0, 1]
Output
[1, 0, 6, 0]
[0, 0, 0, 0]
[0, 0, 0, 0]
[2, 0, 0, 0]
"""

Halide实现在这里,但我得到了下面的错误消息。

代码语言:javascript
复制
#include "Halide.h"
using namespace Halide;

#define N 6

int main() {

    Image<uint8_t> input(N, N);
    for(int y = 0; y < N; y++) {
            for(int x = 0; x < N; x++) {
                    input(x, y) = rand() & 1;
                    printf("%3d", input(x, y));
            }
            printf("\n");
    }
    printf("\n");

    Var x("x"), y("y");

    Func input_f("input_f"), f("f");
    input_f(x, y) = input(x, y);

    f(x, y) = BoundaryConditions::constant_exterior(input_f, 0, 0, N, 0, N)(x, y);
    f(x, y) = select(f(x, y) != 0, f(x-1, y) + f(x+1, y) + f(x, y-1) + f(x, y+1) + 1, 0);

    Image<uint8_t> output = f.realize(N, N);
    for(int y = 0; y < N; y++) {
            for(int x = 0; x < N; x++) {
                    printf("%3d", output(x, y));
            }
            printf("\n");
    }

    return 0;
}

错误消息:

代码语言:javascript
复制
In definition of Func "f":
All of a functions recursive references to itself must contain the same pure variables in the same places as on the left-hand-side.

根据错误信息,我不能在右侧使用'x-1‘和'x+1’。但我想这么做。有没有办法实现这样的递归函数调用?

*如果我可以在Halide中得到预期的结果,我就不会坚持递归调用。

EN

回答 1

Stack Overflow用户

发布于 2019-07-31 07:04:19

你不能在Halide中写递归调用。也许可以试试提拉米苏。http://tiramisu-compiler.org/

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

https://stackoverflow.com/questions/31780426

复制
相关文章

相似问题

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