Halide를 사용하여 스텐실 계산을 일부 수행하려고합니다. 따라서 기본 5 점 2D 스텐실을 가정하고 셀 i, j의 값을 평가하려면 i-1, ji-2, j, i + 1, ji + 2, j의 값이 필요합니다. 이제 C++에서 작동하는 방식은 다음과 같습니다.Halide select 문 관련 문제
for(int i = 2; i < max_i - 2; i++)
for(int j = 2; j < max_j - 2; j++)
Calculate out = some_function_of(in(i,j), in(i-1,j), in(i-2,j), in(i+1,j), in(i+2,j))
이제 Halide를 사용하여 동일한 작업을 수행하려고합니다. 그래서 나는 C++ 코드의 입력 배열과 같은 값을 가진 Buffer를 가지고있다. Func을 밖으로이라고 내가 한 : 나는 다음과 같은 오류 얻을이 코드를 실행하면
out(i,j) = select(i >= 2 && j >= 2, some_function_of(in(i,j), in(i-1,j), in(i-2,j), in(i+1,j), in(i+2,j)) ,0.0f)
: 나의 이해에서
Error: Input buffer b0 is accessed at -1, which is before the min (0) in dimension 0 Aborted (core dumped)
을,이 오류의 원인은 그 선택 문들을 평가입니다 두 진술 그래서 내가 i와 j 값을 2보다 작게 계산하고 싶지는 않지만 함수는 i = 0과 j = 0에서 평가되고 따라서 잘못된 주소 액세스가됩니다.
어쨌든 Halide에서 이것을 수행 할 수 있습니까? if/else 문과 다른 동등한 항목이 있습니까? 당신이 원하는 것을 할 것입니다 경계 조건을 사용하여