带有 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 中的一个错误。
您还可以滚动浏览调试输出,查看是否出现了预期的进出主机的副本数。
我是 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 中的一个错误。
您还可以滚动浏览调试输出,查看是否出现了预期的进出主机的副本数。