あなたが提供した 2 つの cpp ファイルは、GPU 操作 (CUDA および OpenCL) 用です。あなたの質問から、GPU 以外の操作を探していると思いますが、これは正しいファイルです。.
OpenCV はその速度で有名であり、コード内で行われる多くの最適化に由来します。私はそれらのいくつかにいくつかのヒントを与えます。
1. SIMD 最適化
これは、OpenCV における最適化の主な原因の 1 つです。ほとんどすべての算術演算は SIMD 最適化されています。あなたの場合も、SIMD最適化がより良いオプションです(OpenCVはすでに行っています)。実装のレベルに応じて、パフォーマンスが数倍向上します。現在のすべてのプロセッサには、組み込みの SIMD サポート (SSE、AVX など) が付属しています。
通常の C++ に比べて少し複雑です。一度に両方の行列から 2 つのピクセルだけを追加する代わりに、約 16 ピクセル (データ型によって異なります) を同時に追加します。理論的には、16 倍のスピードアップを提供します。これは、SIMD アセンブリを学習しているときに書いた簡単な例です (もっと単純な組み込み関数を使用できます)。あまり最適化されていません (学習するためだけに書かれています) が、それでも 20 倍のスピードアップを提供します。
同様に、ARM プラットフォームで使用するために、コードは NEON に最適化されています (主に Nvidia チームが Tegra プロセッサに貢献)。例
2. TBBによるマルチスレッド
もう 1 つの重要な点は TBB の使用です。一部の人はすでに彼の回答で言及しており、それを実現するには TBB で OpenCV ソースをコンパイルする必要があります。彼が言ったように、それは簡単なことではないかもしれません。顔検出などの多くの機能は、OpenCV で最適化された TBB です。
OpenCV は、ループ展開などの他の手法も実行します。(例)少し改善します。現代のコンパイラは、すでにこの点で非常に優れています。
C++ コードの最適化の詳細については、Agner Fog の最適化手法のマニュアルを参照してください。これらの詳細はすべて関連しています。