Я не могу сгенерировать реализацию OpenCL с Halide, когда выбираю тип граничного условия constant_exterior() с векторизованным планированием.Halide: Использование constant_exterior() + vectorize() в OpenCL
При компиляции, я получаю следующее сообщение об ошибке:
Error:
Vector of bool not valid in OpenCL C (yet)
Я не понимаю, почему это нужно будет использовать булеву вектор ..
Моя функция выглядит примерно так:
void dummy_step()
{
Var x("x"), y("y"), c("c");
Func src("src");
Func dst("dst");
// input parameters
ImageParam image(UInt(8), 3, "inputImage");
Param<int> W;
Param<int> H;
// boundary condition
src = constant_exterior(image, 0, 0, W, 0, H);
Expr x0 = cast<int>(x + y);
Expr y0 = cast<int>(x - y);
dst(x, y, c) = cast<uint8_t>(clamp(src(x0, y0, c), 0.0f, 255.0f));
// scheduling
dst.vectorize(x, 4).gpu_tile(x, y, 16, 8).compute_root();
dst.compile_to_file("test", {image, W, H});
}
Если я удалю .vectorize(x, 4)
, код компилируется. Если я использую другое граничное условие, скажем, src = repeat_edge(image, 0, W, 0, H);
, он также работает.
меня поражает как ошибка в галоиде, хотя. Должно быть возможно исправить codegen для этого, но по крайней мере должно быть лучшее сообщение об ошибке. –
Ошибка здесь: https://github.com/halide/Halide/issues/939 –
Я попытался использовать планируемое предложение, но он говорит мне, что «constant_exterior» вычисляется в недопустимом месте. – thalie