使用CUDA的Halide目标不起作用

时间:2018-06-12 17:46:54

标签: halide

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

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();

1 个答案:

答案 0 :(得分:2)

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

您还可以滚动调试输出,看看是否发生了与主机之间的预期副本数量。