3
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

OpenCVの画像処理をGPU(CUDA)で高速化する XavierNX

Last updated at Posted at 2020-05-27

はじめに

OpenCVの画像処理をGPU(CUDA)で高速化する
というPostをみて、XavierNXでも同様にGPUMATを使った高速化について確認しました。

手順

  • XavierNXのJetpack4.4でOpenCV4をビルドし、GPUMAT(CUDA)を使えるようにします。
    -もともとJetpack4.4にはOpenCVの4.1.1が入っていますが、GPUMATがイネーブルにされずにビルドされています。
  • OpenCVの画像処理をGPU(CUDA)で高速化するにあるスクリプトを実行します。

XavierNXのJetpack4.4でOpenCV4をビルドし、GPUMAT(CUDA)を使えるようにします。

XavierNXで、GPUMAT(CUDA)を使おうとすると

cv2.error: OpenCV(4.1.1) /home/nvidia/host/build_opencv/nv_opencv/modules/core/include/opencv2/core/private.cuda.hpp:107: error: (-216:No CUDA support) The library is compiled without CUDA support in function 'throw_no_cuda'  

といわれGPUMATが使えません。
Jetson Xavier NXでDNN_BACKEND_CUDAが使えるOpenCV4.3をDockerでビルドでOpenCV4.3なGPUMAT(CUDA)がイネーブルなイメージをビルドします。

OpenCVの画像処理をGPU(CUDA)で高速化するにあるスクリプトを実行します。

作成したイメージを実行 # ここでは作成したイメージにopencv430:100 というタグをつけてあります。

sudo docker run -it --rm --net=host --runtime nvidia  -e DISPLAY=$DISPLAY -v /tmp/.X11-unix/:/tmp/.X11-unix opencv430:100

その後Docker上で
https://github.com/iwatake2222/OpenCV_CUDA
にあるスクリプトを実行します。

python3 opencv_cuda.py

結果

各一回づつしか実行してないので、ばらつきはありますが、CPUはJetsonNanoよりはやいですが、GPUはむしろ遅い感じ
GPUの計測時には、
1,GPU側へのコピー、
2,リサイズ、
3,CPU側への返送
なので、実際には2だけがGPUの恩恵を受けるので値そのものはこんなものかとおもいますが、OpenCVの画像処理をGPU(CUDA)で高速化するの結果と比較するとJetsonNanoより遅くなるのはなぜでしょう。。。どなたか知見のある方いらっしゃれば

nvpmodel -m 0
CPU = 0.8271254301071167[msec]
GPU = 0.9963115930557251[msec]
1
nvpmodel -m 1
CPU = 1.1097469329833984[msec]
GPU = 0.8339884281158447[msec]
1
nvpmodel -m 2
CPU = 1.107427430152893[msec]
GPU = 1.0129541397094726[msec]
1
nvpmodel -m 3
CPU = 1.0416812896728516[msec]
GPU = 0.9837974786758423[msec]
1
nvpmodel -m 4
CPU = 1.3258913993835448[msec]
GPU = 1.004795241355896[msec]
1

5/27追記

ふとjetson_clocksを実行して測定してみたら
CPU = 1.1041647672653199[msec]
GPU = 0.3990261316299438[msec]
1
となりました。
/etc/nvpmodel.conf
を見る限り、最大Clockはかわらないのですが、jetson_clocksを実行するとGorvernorが停止され最大クロックに固定されます。検証してませんが、転送はCPU処理、リサイズはGPU処理でこまめに切り替わることで、Gorvernorの動作が間に合ってない可能性があるかもしれません。気が向いたら確認してみます。

3
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?