Use universal intrinsics in bayer2gray#26868
Conversation
|
@fengyuentau @hanliutong Could you try it? |
|
tested on BPI-F3 (Spacemit X60, RVV 1.0) Unfortunately, it looks like performance has degraded Geometric mean (ms)
Name of Test old new new
vs
old
(x-factor)
cvtColorBayer8u::Size_CvtMode_Bayer::(127x61, COLOR_BayerBG2BGR) 0.036 0.036 1.00
cvtColorBayer8u::Size_CvtMode_Bayer::(127x61, COLOR_BayerBG2BGRA) 0.084 0.084 1.00
cvtColorBayer8u::Size_CvtMode_Bayer::(127x61, COLOR_BayerBG2BGR_VNG) 1.353 1.343 1.01
cvtColorBayer8u::Size_CvtMode_Bayer::(127x61, COLOR_BayerBG2GRAY) 0.039 0.079 0.49
cvtColorBayer8u::Size_CvtMode_Bayer::(127x61, COLOR_BayerGB2BGR) 0.036 0.036 1.00
cvtColorBayer8u::Size_CvtMode_Bayer::(127x61, COLOR_BayerGB2BGRA) 0.087 0.087 1.00
cvtColorBayer8u::Size_CvtMode_Bayer::(127x61, COLOR_BayerGB2BGR_VNG) 1.353 1.350 1.00
cvtColorBayer8u::Size_CvtMode_Bayer::(127x61, COLOR_BayerGB2GRAY) 0.038 0.079 0.49
cvtColorBayer8u::Size_CvtMode_Bayer::(127x61, COLOR_BayerGR2BGR) 0.036 0.036 1.00
cvtColorBayer8u::Size_CvtMode_Bayer::(127x61, COLOR_BayerGR2BGRA) 0.087 0.087 1.00
cvtColorBayer8u::Size_CvtMode_Bayer::(127x61, COLOR_BayerGR2BGR_VNG) 1.351 1.346 1.00
cvtColorBayer8u::Size_CvtMode_Bayer::(127x61, COLOR_BayerGR2GRAY) 0.038 0.078 0.49
cvtColorBayer8u::Size_CvtMode_Bayer::(127x61, COLOR_BayerRG2BGR) 0.036 0.036 1.00
cvtColorBayer8u::Size_CvtMode_Bayer::(127x61, COLOR_BayerRG2BGRA) 0.084 0.084 1.00
cvtColorBayer8u::Size_CvtMode_Bayer::(127x61, COLOR_BayerRG2BGR_VNG) 1.347 1.339 1.01
cvtColorBayer8u::Size_CvtMode_Bayer::(127x61, COLOR_BayerRG2GRAY) 0.038 0.078 0.49
cvtColorBayer8u::Size_CvtMode_Bayer::(640x480, COLOR_BayerBG2BGR) 0.422 0.424 0.99
cvtColorBayer8u::Size_CvtMode_Bayer::(640x480, COLOR_BayerBG2BGRA) 0.768 0.764 1.01
cvtColorBayer8u::Size_CvtMode_Bayer::(640x480, COLOR_BayerBG2BGR_VNG) 61.082 60.863 1.00
cvtColorBayer8u::Size_CvtMode_Bayer::(640x480, COLOR_BayerBG2GRAY) 0.304 0.658 0.46
cvtColorBayer8u::Size_CvtMode_Bayer::(640x480, COLOR_BayerGB2BGR) 0.419 0.420 1.00
cvtColorBayer8u::Size_CvtMode_Bayer::(640x480, COLOR_BayerGB2BGRA) 0.761 0.754 1.01
cvtColorBayer8u::Size_CvtMode_Bayer::(640x480, COLOR_BayerGB2BGR_VNG) 61.457 60.840 1.01
cvtColorBayer8u::Size_CvtMode_Bayer::(640x480, COLOR_BayerGB2GRAY) 0.305 0.655 0.47
cvtColorBayer8u::Size_CvtMode_Bayer::(640x480, COLOR_BayerGR2BGR) 0.430 0.429 1.00
cvtColorBayer8u::Size_CvtMode_Bayer::(640x480, COLOR_BayerGR2BGRA) 0.753 0.757 0.99
cvtColorBayer8u::Size_CvtMode_Bayer::(640x480, COLOR_BayerGR2BGR_VNG) 61.409 61.029 1.01
cvtColorBayer8u::Size_CvtMode_Bayer::(640x480, COLOR_BayerGR2GRAY) 0.305 0.660 0.46
cvtColorBayer8u::Size_CvtMode_Bayer::(640x480, COLOR_BayerRG2BGR) 0.421 0.417 1.01
cvtColorBayer8u::Size_CvtMode_Bayer::(640x480, COLOR_BayerRG2BGRA) 0.759 0.758 1.00
cvtColorBayer8u::Size_CvtMode_Bayer::(640x480, COLOR_BayerRG2BGR_VNG) 61.307 60.980 1.01
cvtColorBayer8u::Size_CvtMode_Bayer::(640x480, COLOR_BayerRG2GRAY) 0.304 0.653 0.47BTW, @FantasqueX , if you are interested in RISC-V devices, you can get cloud access to a device with RVV 1.0 at https://cloud.spacemit.com/ |
Hi, @hanliutong. Thank you for testing and your advice. I have a P550 board which haven't setup yet. I'll investigate after investigating aarch64 issue. |
|
Warnings: |
|
@FantasqueX, @hanliutong, the solution for performance regression on RISC-V is to use instead of |
… efficient on RISC-V RVV.
|
No regressions with NEON and RVV now. Desktop performance (AMD Ryzen 7 5700G, Ubuntu 24.04, gcc 13.3): |
I tested this patch on my 14900K desktop with
-DCPU_BASELINE=AVX2, performance doesn't go down.I also try to use universal intrinsics on aarch64, however, time becomes twice as previous hand-written intrinsics. I'll find out that later.
For this patch, it should optimize the performance on machine with
CV_SIMD_SCALABLE.To make this patch simple, I only modify bayer2gray and leave bayer2bgr, bayer2bgra and bayer2bgr_ea as is.
Related: #25724 #26012
Pull Request Readiness Checklist
See details at https://github.com/opencv/opencv/wiki/How_to_contribute#making-a-good-pull-request
Patch to opencv_extra has the same branch name.