gpt4 book ai didi

c++ - 带有GPU时间表的 Halide 产生黑色图像

转载 作者:行者123 更新时间:2023-12-02 10:02:32 25 4
gpt4 key购买 nike

我正在尝试学习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分配时需要复制的实际数据。

关于c++ - 带有GPU时间表的 Halide 产生黑色图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61921857/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com