ArrayFire* と oneAPI による 2 次元フーリエ相関アルゴリズムの高速化

インテル® oneAPI

この記事は、The Parallel Universe Magazine 48 号に掲載されている「Accelerating the 2D Fourier Correlation Algorithm with ArrayFire and oneAPI」の日本語参考訳です。原文は更新される可能性があります。原文と翻訳文の内容が異なる場合は原文を優先してください。


parallel_v48_05

oneAPI によるフーリエ相関アルゴリズムの実装」 (The Parallel Universe 44 号) では、SYCL* とインテル® oneMKL 関数の組み合わせを使用して 2 つの信号の 1 次元相互相関を計算する方法を紹介しました。この記事では、2 次元相互相関を調べて、2 つの類似した画像の最適な重なりを見つけます (図 1) 。2 次元のユースケースの説明に加えて、1 つのコードでどこでも実行できるヘテロジニアス並列処理である oneAPIArrayFire* の 2 つのアプローチを比較して、以前のワークを拡張します。[編集者注:「ArrayFire* と oneAPI、各種ライブラリー、OpenCL* の相互運用性」 (The Parallel Universe 47 号) も参考になります。]


図 1. (2 進数の正方行列として表された) 2 つの画像の最適な配置を見つける。
ここで、 (α, β) は img1 に対する img2 の変位。
相関を計算するとき、2 番目の画像は循環シフトされることに注意。

図 1 の総当たり法の総和は非効率で、大規模な問題では実行できない可能性があるため、以前の 1 次元の例と同様に、2 次元相互相関でもフーリエ相関アルゴリズムを利用して計算の複雑さを大幅に軽減します (図 2) 。両方のアプローチを使用して 2 次元フーリエ相関を実装し、コードを並べて表示して違いと相対的な強みを示します。


図 2. 4 ステップのフーリエ相関アルゴリズム。
DFT は離散フーリエ変換、IDFT は逆 DFT、CONJG は複素共役、MAXLOC は最大相関スコアの場所。

フーリエ相関アルゴリズムの実装

理想的には、画像がデバイスのメモリーにロードされた後に、すべての計算がデバイスで実行されるべきです。ホストで必要なのは、最終的な変位 (2 次元相関の 2 つのスカラー) のみです。その他のホストとデバイス間のデータ転送は不要であり、特に画像が大きい場合、パフォーマンスが低下します。

ArrayFire* によるアクセラレーター・オフロード

図 2 の各ステップは実際には 1 つの文にマップされるため (図 3)、ArrayFire* でフーリエ相関アルゴリズムを実装するのは簡単です。C++、MATLAB (英語)、Fortran、NumPy* の配列表記を知っているプログラマーなら、コメントがなくても、このコードが理解できるでしょう。このコードには明示的なループはなく、明示的なホストとデバイス間のデータ転送やデバイスのオフロードもありません。コーディングの抽象化は暗黙的にデータ並列であり、これらの詳細は ArrayFire* ランタイム・ライブラリーによって処理されます。


図 3. ArrayFire* を使用して実装したフーリエ相関アルゴリズ


製品とパフォーマンス情報

1実際の性能は利用法、構成、その他の要因によって異なります。詳細については、www.Intel.com/PerformanceIndex (英語) を参照してください。

タイトルとURLをコピーしました