我是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();
答案 0 :(得分:2)
要尝试的一件事是添加一个inputImageBuf.set_host_dirty()。如果这有帮助,我会考虑Halide中的一个错误。
您还可以滚动调试输出,看看是否发生了与主机之间的预期副本数量。