Darkside(https対応しました)

2022年7月19日(火) 21:05

不穏な警告

 numpy を cupy に書き直したが、不穏な警告が出る。

UserWarning: cuFFT plan cache is disabled on CUDA 11.1 due to a known bug, so performance may be degraded. The bug is fixed on CUDA 11.2+.
cache = get_plan_cache()

 をいをい、GPU 有効化した OpenCV は import 出来ずに苦しみまくり、ようやく少し古いバージョンの決め打ちで使えるようになったってのに!
 こともあろうか、CUDA 11.1 がバグでアウトだと!?

 最小二乗法の GPU 対応化がうまく行かず、その直前までの処理で実行時間を測ってみる。何と、正味の位相限定相関法だけで1.75秒も掛かっている。cupy を使うことで、numpy より遅くなっている。もちろん OpenCV 関数との差は広がるばかり。これでは、最小二乗法を GPU 対応できたとしても無意味。
 新しい CUDA で OpenCV をビルドし直したら、速くなるのだろうか?
 それ以前の問題として、新しい CUDA でビルドし直した OpenCV は動くのだろうか?

 ひたすら前途多難である。なぜ CUDA に phaseCorrelate 関数が無いんだよ!
 現状は、phaseCorrelate 関数が余りに遅いので GPU を有効にしようと頑張ったけど、意味ありませんでした・・・である。いや、ここは冷静に考えてみよう。余りに酷い目に遭いまくってるせいでキレちゃったが、さすがにおかしい。位相限定相関法の正味の処理は、それほど長いコードではない。

img_f1 = np.fft.fft2(img_g1)
img_f2 = np.fft.fft2(img_g2).conjugate()
img_f = img_f1 * img_f2
img_n = img_f / np.abs(img_f)
img_p = np.fft.ifft2(img_n).real
img_p = np.fft.fftshift(img_p)

 この部分を cupy に置換したら実行時間が1倍半を超えるなんてのは、幾ら何でもおかし過ぎる。かなり大きな行列であり、GPU への転送オーバーヘッドを考慮しても変だ。ここは CUDA11.1 のバグをまずは疑うべきだ。
 CUDA11.7 を使用するよう(そこだけ)パラメーターを変えて OpenCV をビルドし直す。エラー無くインストールできた。cupy も 11.7 対応を入れ直す。結果は・・・1.47秒に高速化された!
 駄目じゃん、まだ numpy より遅いじゃん。

written by higashino [Virtual Reality] [この記事のURL] [コメントを書く] [コメント(0)] [TB(0)]

この記事へのトラックバックPingURL

Comments

TrackBacks

Darkside(https対応しました)

Generated by MySketch GE 1.4.1

Remodelling origin is MySketch 2.7.4