理解多点触控/图像处理
外观
< 理解多点触控
本章旨在为即将到来的章节展示计算模型。这很重要,因为我们可能将这些算法实现为软件或硬件,并行或串行。在我们继续之前,您应该阅读关于图像采集的章节,并理解我们的理论传感器模型。
截至 2007 年,计算机硬件已变得非常复杂,并且专门为信号处理添加了功能,包括单指令多数据 (SIMD) 硬件以及硬件中的多个核心和多个线程 (SMT)。这两者都将影响我们从传感器导入数据的方式,以充分利用硬件。
在为 SIMD 机器实现时,最重要的是要理解结构数组与数组结构的概念。没有经验和较老的程序员经常会错过 SIMD 硬件提供的优化机会,因为他们错误地使用较旧的概念将数据存储在内存中。因此,结构数组的设计惯用法在较旧的代码中十分流行,作为提高可读性的方式。
structure 3d_Point {
int32 x, y, z
}
3d_Point OurData[20];
这会导致对硬件的低效利用,因为我们无法并行处理这些结构,并且由于 (错误) 对齐而会导致处理器缓存加载和卸载问题。处理器公司已经实施了指令来帮助重新解释这种类型的数据(通常称为“混洗”和“反混洗”),但是,只需从一开始就正确设计代码,我们就可以避免这些较慢的指令。
structure 3d_Points {
int32 x[20], y[20], z[20]
}
3d_Points OurData;
数组结构惯用法更有效地利用了我们的并行硬件。因为我们的结构封装了更多数据,所以我们可以更早地将所有数据加载到处理器的缓存中。现在对齐是固定的,并且对齐到 4 字节,我们可以跳过混洗和反混洗。