计算机视觉优化与合成特征分析
1. 编译器与手动优化
通常,一个优秀的编译器能够自动执行许多优化操作,其目标是让 CPU 指令执行管道保持满负荷运行,或者减少内存流量。不过,我们需要查看编译器标志以了解具体的选项。然而,部分优化操作还是需要手动编码,将算法简化为更紧凑的循环,从而在快速寄存器中实现更多的数据共享,并减少数据复制。
以下是图像处理数据访问模式的分类:
| 类型 | 描述 | 源图像数量 | 目标图像数量 | 源图像 | 目标图像 |
| — | — | — | — | — | — |
| (1S) | 1 个源,0 个目标 | 1 | 0 | 源图像 | 无 |
| (2S) | 2 个源,0 个目标 | 2 | 0 | 源图像 | 无 |
| (IP) | 原地处理* | 1 | 0 | 源图像 | 源图像 |
| (1S1D) | 1 个源,1 个目标 | 1 | 1 | 源图像 | 目标图像 |
| (2S1D) | 2 个源,1 个目标 | 2 | 1 | 源图像 | 目标图像 |
*IP 处理通常是减少内存读写带宽和内存占用的最简单方法。
常见的优化技术,包括手动和编译器方法如下:
| 名称 | 描述 |
| — | — |
| 子函数内联 | 通过内联复制函数代码来消除函数调用 |
| 任务链 | 将一个函数的输出逐块输入到等待的函数中 |
| 分支消除 | 重新编码以消除条件分支,或通过合并多个分支条件来减少分支 |
| 循环合并 | 使用更多的直线代码将内外循环合并为更少的循环 |
| 数据打
超级会员免费看
订阅专栏 解锁全文
1111

被折叠的 条评论
为什么被折叠?



