具有 GPU 时间表的卤化物产生黑色图像
Halide with GPU schedule produce black image
我正在尝试学习 Halide,但我无法正确使用 GPU,因为它在为 GPU 安排时会生成黑色图像。对于 CPU,它会产生良好的结果(当注释掉 brighter.gpu_tile(x, y, xo, yo, xi, yi, 8, 8(时;)
#include "Halide.h"
#include "opencv2/core.hpp"
#include "opencv2/highgui.hpp"
void MinimalGpuExample() {
cv::Mat img = cv::imread("test_in.bmp",cv::IMREAD_GRAYSCALE);
Halide::Target target = Halide::get_host_target();
target.set_feature(Halide::Target::CUDA);
target.set_feature(Halide::Target::Debug);
Halide::Buffer<uint8_t> buf(img.data, img.cols, img.rows,1);
Halide::Func brighter;
Halide::Var x, y, c;
Halide::Expr value = buf(x, y, c);
value = Halide::cast<float>(value);
value = value * 1.5f;
value = (Halide::min)(value, 255.0f);
value = Halide::cast<uint8_t>(value);
brighter(x, y, c) = value;
Halide::Var xo, yo, xi, yi;
brighter.gpu_tile(x, y, xo, yo, xi, yi, 8, 8);
brighter.compile_jit(target);
Halide::Buffer<uint8_t> output =
brighter.realize(img.cols, img.rows, 1,target);
output.copy_to_host();
cv::Mat1b img_brither(img.rows, img.cols, output.data());
cv::imwrite("test_out.bmp", img_brither);
}
int main()
{
MinimalGpuExample();
}
我的问题是从主机上分配的缓冲区将数据传输到 GPU 的东西,因为该示例与 CUDA 调用一起打印良好的值。
void MinimalGpuExampleWorking() {
Halide::Func f;
Halide::Var x, y, xo, xi, yo, yi;
f(x, y) = x + y;
f.gpu_tile(x, y, xo, yo, xi, yi, 16, 16);
Halide::Target target = Halide::get_host_target();
target.set_feature(Halide::Target::CUDA);
target.set_feature(Halide::Target::Debug);
f.compile_jit(target);
// Run it.
Halide::Buffer<int> result = f.realize(32, 32);
// Print the result.
for (int y = 0; y < result.height(); y++) {
for (int x = 0; x < result.width(); x++) {
printf("%3d ", result(x, y));
}
printf("n");
}
}
尝试在构造输入缓冲区后立即添加 buf.set_host_dirty((。Halide 不确定这是指针后面的未初始化内存,还是在进行 GPU 分配时需要复制的实际数据。
相关文章:
- 具有 GPU 时间表的卤化物产生黑色图像
- openCV中的Absdiff可以编译,但显示黑色图像
- 在图像上的矩形区域之外填充黑色
- 具有SPI_SETDESKWALLPAPER功能的程序仅在尝试使用C++将其更改为图像时将桌面背景更改为黑色
- OpenCv 3.3 Cuda 中值过滤器生成 2/3 的图像黑色
- OPENCV :: CUDA GPUMAT CV_8UC1至CV_32FC1转换黑色图像
- OpenCV,Dlib - 作为黑色图像输出的垫子对象
- 从C++中的屏幕选择创建位图时的黑色图像
- 屏幕截图仅返回黑色图像
- 在C++中,在图像周围填充黑色边框是最有效的方法
- 在opencv中使用imwrite保存图像时,会将图像全部写入黑色,但imshow会正确显示
- 从HWND获取并保存位图(每个像素8,4,1位-黑色图像)
- OpenCV 项目在将直方图应用于黑色图像时崩溃
- SDL产生黑色图像
- 我正在尝试将灰度转换为更大的黑色图像.我得到这个错误OpenCV错误:断言失败
- 在黑色图像上叠加精明的边缘
- 加载RGB PNG会导致黑色图像
- VTKPNGWriter打印黑色图像
- visual截图c++ directx得到黑色图像
- 使用NDK从本机内存恢复图像会返回无显示的黑色图像