CARVIEW |
Navigation Menu
-
-
Notifications
You must be signed in to change notification settings - Fork 56.2k
Use universal intrinsics in bayer2gray #26868
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
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.47 BTW, @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.