带有 CUDA 目标的卤化物不起作用

Halide with CUDA targets not working

我是 Halide 的新手,编写了一个简单的代码来为图像中的每个像素计算 max(127, pix(x,y))。 虽然代码在 CPU 上运行良好,但当我设置 Target::CUDA 时它会给我错误的输出。我找不到问题所在。 以下是我的代码的一部分。让我知道代码是否有错误,或者我是否必须重新构建 Halide 以支持启用 CUDA。

Halide::Var x, y;
Halide::Buffer<uint8_t> inputImageBuf(inpImg, imgSizes);

Halide::Func reluOp("ReLU Operation");
reluOp(x,y) = Halide::max(127, inputImageBuf(x, y));

int numTiles = 4;
Halide::Var threads_x, threads_y, blocks_x, blocks_y;

Halide::Target targetCUDA = Halide::get_host_target();
targetCUDA.set_feature(Halide::Target::CUDA);
targetCUDA.set_feature(Halide::Target::Debug);
reluOp.gpu_tile(x, y, blocks_x, blocks_y, threads_x, threads_y, numTiles, numTiles, Halide::TailStrategy::Auto, Halide::DeviceAPI::CUDA);

// reluOp.compile_jit(targetCUDA);  
reluOp.print_loop_nest();
Halide::Buffer<uint8_t> result = reluOp.realize(cols, rows, targetCUDA);

result.copy_to_host();

可以尝试的一件事是添加 inputImageBuf.set_host_dirty()。如果这有帮助,我会认为这是 Halide 中的一个错误。

您还可以滚动浏览调试输出,查看是否出现了预期的进出主机的副本数。