您提供的两个 cpp 文件用于 GPU 操作(CUDA 和 OpenCL)。根据您的问题,我认为您正在寻找非 GPU 操作,这是正确的文件。.
OpenCV 以其速度而闻名,它来自他们在代码中所做的大量优化。我只是给他们一些提示。
1、SIMD优化
这是 OpenCV 中优化的主要来源之一。几乎所有算术运算都经过 SIMD 优化。在您的情况下,SIMD 优化也是更好的选择(OpenCV 已经这样做了)。根据您的实施级别,它可以将性能提高数倍。所有现代处理器都带有内置的 SIMD 支持(SSE、AVX 等)。
与我们普通的 C++ 相比,它有点复杂。不是一次只从两个矩阵中添加两个像素,而是同时添加大约 16 个像素(这取决于数据类型)。理论上它提供了 16 倍的加速。这是我在学习 SIMD 汇编时编写的一个简单示例(您可以使用更简单的 Intrinsics)。它没有太多优化(只是为了学习而编写),仍然提供了 20 倍的加速。
同样,为了在 ARM 平台中使用,代码正在被 NEON 优化(主要由 Nvidia 团队为其 Tegra 处理器提供)。例子
2.通过TBB进行多线程
另一个重要的是 TBB 的使用,有人已经在他的回答中提到了它,你必须用 TBB 编译 OpenCV 源代码才能实现它。正如他所提到的,这可能不是一件容易的事。OpenCV 中对人脸检测等许多功能进行了 TBB 优化。
OpenCV 还做了一些其他技术,比如循环展开。(示例)它提供了轻微的改进。现代编译器已经非常擅长这一点。
您可以阅读Agner Fog 的优化技术手册,了解有关优化 C++ 代码的更多详细信息。所有这些细节都是相关的。