バックエンドに?openCLを使ったopenCV+pythonのテスト
ちょっと他の事をするのにどう動くのか実験した。
・SW
openSUSE leap 15.3 + python + scienceリポジトリ
・HW
ThinkPad T440s/Haswall i5-4200U
openSUSE leap 15.3のopenCVが3.3と古くpython3-opencvでopenCLをうまく使える実装になってないっぽいのでscienceリポジトリからopenCL4.5をもらってくる。
clinfoで列挙される事を確認する事。clpeakはHaswallのGPUでは古くうまく動かないが気にしない。
・サンプル
import cv2import timeim = 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()-aprint(a)
VScodeからコピペしたら色付きになるんだwwwww。
ルシフェル「まあいい。
1000回ループなので画像に合わせて調節したらいい。
image.jpgとして適当な画像を用意する。今回は1000x1000pxの画像を用意したがループ内の他のオーバーヘッドが大きく1000x1000でも小さい感じ。
・環境変数
openCV上から設定できるんだろうけど,とりあえずなのでexportで設定する。
今回はCPU内蔵のGPUを使うので:igpuとする。ディスクリートGPUの場合は:dgpu。disableも可,らしい(CPUになる)
・結果
CPU 2C/4Tで処理 51s
GPU 41s
iGPUで実際に処理されているか?は例えば$ intel_gpu_topで見るとGPU処理されている場合はBUSYが増えCPU処理はシングルスレッドの待機?ループになりスカスカになるし,CPU処理なら特に設定してない限りはそのCPUの最大スレッド数で処理しようとするとするのでtopなんかで確認できる。