c++ - 预先计算数据与顺序处理

标签 c++ c caching optimization

我有以下顺序代码: 1.

ProcessImage(){
    for_each_line
    {
        for_each_pixel_of_line()
        {
            A = ComputeA();
            B = ComputeB();
            DoBiggerWork();
        }
    }
}

现在我更改为预先计算整个图像的所有 A、B 值,如下所示。 2.

    ProcessImage(){
       for_each_line
       {
           A = ComputeAinLine();
           B = ComputeBinLine();
           for_each_pixel_of_line()
           {
                Ai = A[i];
                Bi = B[i];
                DoBiggerWork();
            }
        }
    }

结果表明,与第一个代码块相比,第二个代码块的处理时间慢了大约 10%。

我想知道是否是第二个代码块中的缓存未命中问题?

我将使用 SIMD 在第二个代码块中并行进行预计算。值得一试吗?

最佳答案

一切都取决于你是如何实现你的功能的。尝试剖析您的代码并确定瓶颈在哪里。

如果为一行计算一次值没有任何好处,则不要使用它。您只需要一个像素例程的 A 和 B 值。在第二个代码块中,您运行该行一次以计算值,然后再次运行 DoBiggerWork() 并且每次从准备好的数组中检索值。这会花费更多的 CPU 时间。

关于c++ - 预先计算数据与顺序处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31745096/

相关文章:

c++ - 显示带有多个参数的 QMessageBox

c - stdint.h 中描述的 "Fast types"是什么?

java - Ehcache Java Spring MVC 和分页 @Cacheable

c++ - 鸽子洞/多个数字

c++ - OpenGL - 第一人称相机矩阵的问题

c++ - 关于将 string::swap() 与临时对象一起使用的问题

c - 如何将 main 转换为函数

c - 如何检查数组的元素是否是终止元素并返回新行?

c# - LINQ to SQL 缓存问题

asp.net-mvc - ASP.Net MVC具有缓存的数据库驱动菜单