gpt4 book ai didi

halide - 意外行为 : Empty loop causes improved results in blur function

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

多年来,我参加了 Siggraph 的几次 Halide 小组讨论,最终决定进行一些测试,以确定对我现有的软件进行转码是否有用。到目前为止,结果令人印象深刻。

我正在根据 Siggraph 2015 上提供的代码编写高斯模糊,并遇到了一些我无法理解的奇怪行为。我不确定这是我自己的误解还是某种错误/“功能”。

参见下面的代码,注意空循环。 gkernel 和 normalize 是我编写的用于生成高斯系数的函数。当我编译并运行带有注释掉的循环的代码时,输​​出图像为黑色(全零)。当我在函数中保留空循环时,执行速度会更快,并且输出图像会正确模糊。

我是否遗漏了一些基本的东西,或者这是某种错误?我在 Windows 7 上使用 MSVS Professional 2013。

功能代码:

Func HalideGBlur(Func f){
float k[3];
gkernel(k);
normalize(k);

for (int i = 0; i < 1; i++){
;
}

Func ypass;
ypass(X, Y, C) = ( k[1] * f(X, Y, C) +
k[0] * (f(X, Y - 1, C) + f(X, Y + 1, C)) );
Func xpass;
xpass(X, Y, C) = ( k[1] * ypass(X, Y, C) +
k[0] * (ypass(X -1, Y, C) + ypass(X + 1, Y, C)) );

//scheduling for x and y passes
xpass.compute_root().vectorize(X, 8).parallel(Y);
ypass.compute_at(xpass, Y).vectorize(X, 8);
return xpass;
}

相关执行代码:

Func g = HalideGBlur(bounded_image);

htime = ocvtime = FLT_MAX;
cout << "\n****Testing Gaussian Blur****\n";
//Run Halide tests
for (int x = 0; x < 10; x++){
start_time = omp_get_wtime();
g.realize(output);
end = omp_get_wtime() - start_time;
if (end < htime){ htime = end; }
}
cout << "halide best: " << htime << "\n";

没有无意义循环的结果:

****Testing Gaussian Blur****
halide best: 0.0246554
ocv best: 0.0318704
Halide is 1.2926 times as fast as OpenCV.

无意义循环的结果:

****Testing Gaussian Blur****
halide best: 0.00749808
ocv best: 0.0317644
Halide is 4.2363 times as fast as OpenCV.

最佳答案

这是一个益智游戏。也许您有一个内存占用错误,并且该循环正在影响堆栈帧布局。 Windows 上是否有等效的 valgrind 可以用来检查这一点?

关于halide - 意外行为 : Empty loop causes improved results in blur function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32209651/

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