個人的な闇の事件簿

ロシアの文豪ドストエフスキーの罪と罰。殺人を犯す主人公は自らを正当化する為こう考えた。選ばれた非凡人は、新しい社会の成長のためなら、社会道徳を踏み外す権利を持つ

バックエンドに?openCLを使ったopenCV+pythonのテスト

 ちょっと他の事をするのにどう動くのか実験した。

・SW

 openSUSE leap 15.3 + python + scienceリポジトリ

・HW

 ThinkPad T440s/Haswall i5-4200U

 

 openSUSE leap 15.3のopenCVが3.3と古くpython3-opencvopenCLをうまく使える実装になってないっぽいのでscienceリポジトリからopenCL4.5をもらってくる。

 clinfoで列挙される事を確認する事。clpeakはHaswallのGPUでは古くうまく動かないが気にしない。

 

・サンプル

import cv2
import time
im = cv2.imread("image.jpg", cv2.IMREAD_COLOR)
w,h,c = im.shape[:3]
print(w,h,c)
a = time.time()
for i in range(1,10000):
img = cv2.UMat(im)
imgUMat = cv2.UMat(img)
gray = cv2.cvtColor(imgUMat, cv2.COLOR_BGR2GRAY)
gray = cv2.GaussianBlur(gray, (7, 7), 1.5)
gray = cv2.Canny(gray, 0, 50)
a= time.time()-a
print(a)

 VScodeからコピペしたら色付きになるんだwwwww。

 ルシフェル「まあいい。

 

 1000回ループなので画像に合わせて調節したらいい。

 image.jpgとして適当な画像を用意する。今回は1000x1000pxの画像を用意したがループ内の他のオーバーヘッドが大きく1000x1000でも小さい感じ。

 

環境変数

 openCV上から設定できるんだろうけど,とりあえずなのでexportで設定する。

export OPENCV_OPENCL_DEVICE=:igpu

 今回はCPU内蔵のGPUを使うので:igpuとする。ディスクリートGPUの場合は:dgpu。disableも可,らしい(CPUになる)

 

・結果

 CPU 2C/4Tで処理 51s

 GPU 41s

 iGPUで実際に処理されているか?は例えば$ intel_gpu_topで見るとGPU処理されている場合はBUSYが増えCPU処理はシングルスレッドの待機?ループになりスカスカになるし,CPU処理なら特に設定してない限りはそのCPUの最大スレッド数で処理しようとするとするのでtopなんかで確認できる。

f:id:xmiu0824:20210928222447p:plain