1 /*M///////////////////////////////////////////////////////////////////////////////////////
2 //
3 //  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
4 //
5 //  By downloading, copying, installing or using the software you agree to this license.
6 //  If you do not agree to this license, do not download, install,
7 //  copy or use the software.
8 //
9 //
10 //                           License Agreement
11 //                For Open Source Computer Vision Library
12 //
13 // Copyright (C) 2010-2013, Advanced Micro Devices, Inc., all rights reserved.
14 // Third party copyrights are property of their respective owners.
15 //
16 // Redistribution and use in source and binary forms, with or without modification,
17 // are permitted provided that the following conditions are met:
18 //
19 //   * Redistribution's of source code must retain the above copyright notice,
20 //     this list of conditions and the following disclaimer.
21 //
22 //   * Redistribution's in binary form must reproduce the above copyright notice,
23 //     this list of conditions and the following disclaimer in the documentation
24 //     and/or other materials provided with the distribution.
25 //
26 //   * The name of the copyright holders may not be used to endorse or promote products
27 //     derived from this software without specific prior written permission.
28 //
29 // This software is provided by the copyright holders and contributors "as is" and
30 // any express or implied warranties, including, but not limited to, the implied
31 // warranties of merchantability and fitness for a particular purpose are disclaimed.
32 // In no event shall the OpenCV Foundation or contributors be liable for any direct,
33 // indirect, incidental, special, exemplary, or consequential damages
34 // (including, but not limited to, procurement of substitute goods or services;
35 // loss of use, data, or profits; or business interruption) however caused
36 // and on any theory of liability, whether in contract, strict liability,
37 // or tort (including negligence or otherwise) arising in any way out of
38 // the use of this software, even if advised of the possibility of such damage.
39 //
40 //M*/
41 
42 #include "../perf_precomp.hpp"
43 #include "opencv2/ts/ocl_perf.hpp"
44 
45 #ifdef HAVE_OPENCL
46 
47 namespace cvtest {
48 namespace ocl {
49 
50 ///////////// Lut ////////////////////////
51 
52 typedef Size_MatType LUTFixture;
53 
OCL_PERF_TEST_P(LUTFixture,LUT,::testing::Combine (OCL_TEST_SIZES,OCL_TEST_TYPES))54 OCL_PERF_TEST_P(LUTFixture, LUT,
55           ::testing::Combine(OCL_TEST_SIZES,
56                              OCL_TEST_TYPES))
57 {
58     const Size_MatType_t params = GetParam();
59     const Size srcSize = get<0>(params);
60     const int type = get<1>(params), cn = CV_MAT_CN(type);
61 
62     checkDeviceMaxMemoryAllocSize(srcSize, type);
63 
64     UMat src(srcSize, CV_8UC(cn)), lut(1, 256, type);
65     int dstType = CV_MAKETYPE(lut.depth(), src.channels());
66     UMat dst(srcSize, dstType);
67 
68     declare.in(src, lut, WARMUP_RNG).out(dst);
69 
70     OCL_TEST_CYCLE() cv::LUT(src, lut, dst);
71 
72     SANITY_CHECK(dst);
73 }
74 
75 ///////////// Exp ////////////////////////
76 
77 typedef Size_MatType ExpFixture;
78 
OCL_PERF_TEST_P(ExpFixture,Exp,::testing::Combine (OCL_TEST_SIZES,OCL_PERF_ENUM (CV_32FC1,CV_32FC4)))79 OCL_PERF_TEST_P(ExpFixture, Exp, ::testing::Combine(
80                 OCL_TEST_SIZES, OCL_PERF_ENUM(CV_32FC1, CV_32FC4)))
81 {
82     const Size_MatType_t params = GetParam();
83     const Size srcSize = get<0>(params);
84     const int type = get<1>(params);
85 
86     checkDeviceMaxMemoryAllocSize(srcSize, type);
87 
88     UMat src(srcSize, type), dst(srcSize, type);
89     declare.in(src).out(dst);
90     randu(src, 5, 16);
91 
92     OCL_TEST_CYCLE() cv::exp(src, dst);
93 
94     SANITY_CHECK(dst, 1e-6, ERROR_RELATIVE);
95 }
96 
97 ///////////// Log ////////////////////////
98 
99 typedef Size_MatType LogFixture;
100 
OCL_PERF_TEST_P(LogFixture,Log,::testing::Combine (OCL_TEST_SIZES,OCL_PERF_ENUM (CV_32FC1,CV_32FC4)))101 OCL_PERF_TEST_P(LogFixture, Log, ::testing::Combine(
102                 OCL_TEST_SIZES, OCL_PERF_ENUM(CV_32FC1, CV_32FC4)))
103 {
104     const Size_MatType_t params = GetParam();
105     const Size srcSize = get<0>(params);
106     const int type = get<1>(params);
107 
108     checkDeviceMaxMemoryAllocSize(srcSize, type);
109 
110     UMat src(srcSize, type), dst(srcSize, type);
111     randu(src, 1, 10000);
112     declare.in(src).out(dst);
113 
114     OCL_TEST_CYCLE() cv::log(src, dst);
115 
116     SANITY_CHECK(dst, 1e-6, ERROR_RELATIVE);
117 }
118 
119 ///////////// Add ////////////////////////
120 
121 typedef Size_MatType AddFixture;
122 
OCL_PERF_TEST_P(AddFixture,Add,::testing::Combine (OCL_TEST_SIZES,OCL_TEST_TYPES_134))123 OCL_PERF_TEST_P(AddFixture, Add,
124                 ::testing::Combine(OCL_TEST_SIZES, OCL_TEST_TYPES_134))
125 {
126     const Size srcSize = GET_PARAM(0);
127     const int type = GET_PARAM(1);
128 
129     checkDeviceMaxMemoryAllocSize(srcSize, type);
130 
131     UMat src1(srcSize, type), src2(srcSize, type), dst(srcSize, type);
132     declare.in(src1, src2, WARMUP_RNG).out(dst);
133 
134     OCL_TEST_CYCLE() cv::add(src1, src2, dst);
135 
136     SANITY_CHECK(dst);
137 }
138 
139 ///////////// Subtract ////////////////////////
140 
141 typedef Size_MatType SubtractFixture;
142 
OCL_PERF_TEST_P(SubtractFixture,Subtract,::testing::Combine (OCL_TEST_SIZES,OCL_TEST_TYPES_134))143 OCL_PERF_TEST_P(SubtractFixture, Subtract,
144             ::testing::Combine(OCL_TEST_SIZES, OCL_TEST_TYPES_134))
145 {
146     const Size_MatType_t params = GetParam();
147     const Size srcSize = get<0>(params);
148     const int type = get<1>(params);
149 
150     checkDeviceMaxMemoryAllocSize(srcSize, type);
151 
152     UMat src1(srcSize, type), src2(srcSize, type), dst(srcSize, type);
153     declare.in(src1, src2, WARMUP_RNG).out(dst);
154 
155     OCL_TEST_CYCLE() cv::subtract(src1, src2, dst);
156 
157     SANITY_CHECK(dst);
158 }
159 
160 ///////////// Mul ////////////////////////
161 
162 typedef Size_MatType MulFixture;
163 
OCL_PERF_TEST_P(MulFixture,Multiply,::testing::Combine (OCL_TEST_SIZES,OCL_TEST_TYPES_134))164 OCL_PERF_TEST_P(MulFixture, Multiply, ::testing::Combine(OCL_TEST_SIZES, OCL_TEST_TYPES_134))
165 {
166     const Size_MatType_t params = GetParam();
167     const Size srcSize = get<0>(params);
168     const int type = get<1>(params);
169 
170     checkDeviceMaxMemoryAllocSize(srcSize, type);
171 
172     UMat src1(srcSize, type), src2(srcSize, type), dst(srcSize, type);
173     declare.in(src1, src2, WARMUP_RNG).out(dst);
174 
175     OCL_TEST_CYCLE() cv::multiply(src1, src2, dst);
176 
177     SANITY_CHECK(dst);
178 }
179 
180 ///////////// Div ////////////////////////
181 
182 typedef Size_MatType DivFixture;
183 
OCL_PERF_TEST_P(DivFixture,Divide,::testing::Combine (OCL_TEST_SIZES,OCL_TEST_TYPES_134))184 OCL_PERF_TEST_P(DivFixture, Divide,
185             ::testing::Combine(OCL_TEST_SIZES, OCL_TEST_TYPES_134))
186 {
187     const Size_MatType_t params = GetParam();
188     const Size srcSize = get<0>(params);
189     const int type = get<1>(params);
190 
191     checkDeviceMaxMemoryAllocSize(srcSize, type);
192 
193     UMat src1(srcSize, type), src2(srcSize, type), dst(srcSize, type);
194     declare.in(src1, src2, WARMUP_RNG).out(dst);
195 
196     OCL_TEST_CYCLE() cv::divide(src1, src2, dst);
197 
198     SANITY_CHECK(dst, 1e-6, ERROR_RELATIVE);
199 }
200 
201 ///////////// Absdiff ////////////////////////
202 
203 typedef Size_MatType AbsDiffFixture;
204 
OCL_PERF_TEST_P(AbsDiffFixture,Absdiff,::testing::Combine (OCL_TEST_SIZES,OCL_TEST_TYPES_134))205 OCL_PERF_TEST_P(AbsDiffFixture, Absdiff,
206             ::testing::Combine(OCL_TEST_SIZES, OCL_TEST_TYPES_134))
207 {
208     const Size_MatType_t params = GetParam();
209     const Size srcSize = get<0>(params);
210     const int type = get<1>(params);
211 
212     checkDeviceMaxMemoryAllocSize(srcSize, type);
213 
214     UMat src1(srcSize, type), src2(srcSize, type), dst(srcSize, type);
215     declare.in(src1, src2, WARMUP_RNG).in(dst);
216 
217     OCL_TEST_CYCLE() cv::absdiff(src1, src2, dst);
218 
219     SANITY_CHECK(dst);
220 }
221 
222 ///////////// CartToPolar ////////////////////////
223 
224 typedef Size_MatType CartToPolarFixture;
225 
OCL_PERF_TEST_P(CartToPolarFixture,CartToPolar,::testing::Combine (OCL_TEST_SIZES,OCL_PERF_ENUM (CV_32FC1,CV_32FC4)))226 OCL_PERF_TEST_P(CartToPolarFixture, CartToPolar, ::testing::Combine(
227                 OCL_TEST_SIZES, OCL_PERF_ENUM(CV_32FC1, CV_32FC4)))
228 {
229     const Size_MatType_t params = GetParam();
230     const Size srcSize = get<0>(params);
231     const int type = get<1>(params);
232 
233     checkDeviceMaxMemoryAllocSize(srcSize, type);
234 
235     UMat src1(srcSize, type), src2(srcSize, type),
236             dst1(srcSize, type), dst2(srcSize, type);
237     declare.in(src1, src2, WARMUP_RNG).out(dst1, dst2);
238 
239     OCL_TEST_CYCLE() cv::cartToPolar(src1, src2, dst1, dst2);
240 
241     SANITY_CHECK(dst1, 8e-3);
242     SANITY_CHECK(dst2, 8e-3);
243 }
244 
245 ///////////// PolarToCart ////////////////////////
246 
247 typedef Size_MatType PolarToCartFixture;
248 
OCL_PERF_TEST_P(PolarToCartFixture,PolarToCart,::testing::Combine (OCL_TEST_SIZES,OCL_PERF_ENUM (CV_32FC1,CV_32FC4)))249 OCL_PERF_TEST_P(PolarToCartFixture, PolarToCart, ::testing::Combine(
250                 OCL_TEST_SIZES, OCL_PERF_ENUM(CV_32FC1, CV_32FC4)))
251 {
252     const Size_MatType_t params = GetParam();
253     const Size srcSize = get<0>(params);
254     const int type = get<1>(params);
255 
256     checkDeviceMaxMemoryAllocSize(srcSize, type);
257 
258     UMat src1(srcSize, type), src2(srcSize, type),
259             dst1(srcSize, type), dst2(srcSize, type);
260     declare.in(src1, src2, WARMUP_RNG).out(dst1, dst2);
261 
262     OCL_TEST_CYCLE() cv::polarToCart(src1, src2, dst1, dst2);
263 
264     SANITY_CHECK(dst1, 5e-5);
265     SANITY_CHECK(dst2, 5e-5);
266 }
267 
268 ///////////// Magnitude ////////////////////////
269 
270 typedef Size_MatType MagnitudeFixture;
271 
OCL_PERF_TEST_P(MagnitudeFixture,Magnitude,::testing::Combine (OCL_TEST_SIZES,OCL_PERF_ENUM (CV_32FC1,CV_32FC4)))272 OCL_PERF_TEST_P(MagnitudeFixture, Magnitude, ::testing::Combine(
273                 OCL_TEST_SIZES, OCL_PERF_ENUM(CV_32FC1, CV_32FC4)))
274 {
275     const Size_MatType_t params = GetParam();
276     const Size srcSize = get<0>(params);
277     const int type = get<1>(params);
278 
279     checkDeviceMaxMemoryAllocSize(srcSize, type);
280 
281     UMat src1(srcSize, type), src2(srcSize, type),
282             dst(srcSize, type);
283     declare.in(src1, src2, WARMUP_RNG).out(dst);
284 
285     OCL_TEST_CYCLE() cv::magnitude(src1, src2, dst);
286 
287     SANITY_CHECK(dst, 1e-6);
288 }
289 
290 ///////////// Transpose ////////////////////////
291 
292 typedef Size_MatType TransposeFixture;
293 
OCL_PERF_TEST_P(TransposeFixture,Transpose,::testing::Combine (OCL_TEST_SIZES,OCL_TEST_TYPES_134))294 OCL_PERF_TEST_P(TransposeFixture, Transpose, ::testing::Combine(
295                 OCL_TEST_SIZES, OCL_TEST_TYPES_134))
296 {
297     const Size_MatType_t params = GetParam();
298     const Size srcSize = get<0>(params);
299     const int type = get<1>(params);
300 
301     checkDeviceMaxMemoryAllocSize(srcSize, type);
302 
303     UMat src(srcSize, type), dst(srcSize, type);
304     declare.in(src, WARMUP_RNG).out(dst);
305 
306     OCL_TEST_CYCLE() cv::transpose(src, dst);
307 
308     SANITY_CHECK(dst);
309 }
310 
311 OCL_PERF_TEST_P(TransposeFixture, TransposeInplace, ::testing::Combine(
312                 OCL_PERF_ENUM(Size(640, 640), Size(1280, 1280), Size(2160, 2160)), OCL_TEST_TYPES_134))
313 {
314     const Size_MatType_t params = GetParam();
315     const Size srcSize = get<0>(params);
316     const int type = get<1>(params);
317 
318     checkDeviceMaxMemoryAllocSize(srcSize, type);
319 
320     UMat src(srcSize, type);
321     declare.in(src, WARMUP_RNG).out(src, WARMUP_NONE);
322 
323     OCL_TEST_CYCLE() cv::transpose(src, src);
324 
325     SANITY_CHECK_NOTHING();
326 }
327 
328 ///////////// Flip ////////////////////////
329 
330 enum
331 {
332     FLIP_BOTH = 0, FLIP_ROWS, FLIP_COLS
333 };
334 
335 CV_ENUM(FlipType, FLIP_BOTH, FLIP_ROWS, FLIP_COLS)
336 
337 typedef std::tr1::tuple<Size, MatType, FlipType> FlipParams;
338 typedef TestBaseWithParam<FlipParams> FlipFixture;
339 
OCL_PERF_TEST_P(FlipFixture,Flip,::testing::Combine (OCL_TEST_SIZES,OCL_TEST_TYPES,FlipType::all ()))340 OCL_PERF_TEST_P(FlipFixture, Flip,
341             ::testing::Combine(OCL_TEST_SIZES,
342                                OCL_TEST_TYPES, FlipType::all()))
343 {
344     const FlipParams params = GetParam();
345     const Size srcSize = get<0>(params);
346     const int type = get<1>(params);
347     const int flipType = get<2>(params);
348 
349     checkDeviceMaxMemoryAllocSize(srcSize, type);
350 
351     UMat src(srcSize, type), dst(srcSize, type);
352     declare.in(src, WARMUP_RNG).out(dst);
353 
354     OCL_TEST_CYCLE() cv::flip(src, dst, flipType - 1);
355 
356     SANITY_CHECK(dst);
357 }
358 
359 ///////////// minMaxLoc ////////////////////////
360 
361 typedef Size_MatType MinMaxLocFixture;
362 
OCL_PERF_TEST_P(MinMaxLocFixture,MinMaxLoc,::testing::Combine (OCL_TEST_SIZES,OCL_TEST_TYPES_134))363 OCL_PERF_TEST_P(MinMaxLocFixture, MinMaxLoc,
364             ::testing::Combine(OCL_TEST_SIZES, OCL_TEST_TYPES_134))
365 {
366     const Size_MatType_t params = GetParam();
367     const Size srcSize = get<0>(params);
368     const int type = get<1>(params);
369     bool onecn = CV_MAT_CN(type) == 1;
370 
371     checkDeviceMaxMemoryAllocSize(srcSize, type);
372 
373     UMat src(srcSize, type);;
374     declare.in(src, WARMUP_RNG);
375 
376     double min_val = 0.0, max_val = 0.0;
377     Point min_loc, max_loc;
378 
379     OCL_TEST_CYCLE() cv::minMaxLoc(src, &min_val, &max_val, onecn ? &min_loc : NULL,
380                                    onecn ? &max_loc : NULL);
381 
382     ASSERT_GE(max_val, min_val);
383     SANITY_CHECK(min_val);
384     SANITY_CHECK(max_val);
385 
386     int min_loc_x = min_loc.x, min_loc_y = min_loc.y, max_loc_x = max_loc.x,
387             max_loc_y = max_loc.y;
388     SANITY_CHECK(min_loc_x);
389     SANITY_CHECK(min_loc_y);
390     SANITY_CHECK(max_loc_x);
391     SANITY_CHECK(max_loc_y);
392 }
393 
394 ///////////// Sum ////////////////////////
395 
396 typedef Size_MatType SumFixture;
397 
OCL_PERF_TEST_P(SumFixture,Sum,::testing::Combine (OCL_TEST_SIZES,OCL_TEST_TYPES_134))398 OCL_PERF_TEST_P(SumFixture, Sum,
399             ::testing::Combine(OCL_TEST_SIZES,
400                                OCL_TEST_TYPES_134))
401 {
402     const Size_MatType_t params = GetParam();
403     const Size srcSize = get<0>(params);
404     const int type = get<1>(params), depth = CV_MAT_DEPTH(type);
405 
406     checkDeviceMaxMemoryAllocSize(srcSize, type);
407 
408     UMat src(srcSize, type);
409     Scalar result;
410     randu(src, 0, 60);
411     declare.in(src);
412 
413     OCL_TEST_CYCLE() result = cv::sum(src);
414 
415     if (depth >= CV_32F)
416         SANITY_CHECK(result, 1e-6, ERROR_RELATIVE);
417     else
418         SANITY_CHECK(result);
419 }
420 
421 ///////////// countNonZero ////////////////////////
422 
423 typedef Size_MatType CountNonZeroFixture;
424 
OCL_PERF_TEST_P(CountNonZeroFixture,CountNonZero,::testing::Combine (OCL_TEST_SIZES,OCL_PERF_ENUM (CV_8UC1,CV_32FC1)))425 OCL_PERF_TEST_P(CountNonZeroFixture, CountNonZero,
426                 ::testing::Combine(OCL_TEST_SIZES,
427                                OCL_PERF_ENUM(CV_8UC1, CV_32FC1)))
428 {
429     const Size_MatType_t params = GetParam();
430     const Size srcSize = get<0>(params);
431     const int type = get<1>(params);
432 
433     checkDeviceMaxMemoryAllocSize(srcSize, type);
434 
435     UMat src(srcSize, type);
436     int result = 0;
437     randu(src, 0, 10);
438     declare.in(src);
439 
440     OCL_TEST_CYCLE() result = cv::countNonZero(src);
441 
442     SANITY_CHECK(result);
443 }
444 
445 ///////////// Phase ////////////////////////
446 
447 typedef Size_MatType PhaseFixture;
448 
OCL_PERF_TEST_P(PhaseFixture,Phase,::testing::Combine (OCL_TEST_SIZES,OCL_PERF_ENUM (CV_32FC1,CV_32FC4)))449 OCL_PERF_TEST_P(PhaseFixture, Phase, ::testing::Combine(
450                 OCL_TEST_SIZES, OCL_PERF_ENUM(CV_32FC1, CV_32FC4)))
451 {
452     const Size_MatType_t params = GetParam();
453     const Size srcSize = get<0>(params);
454     const int type = get<1>(params);
455 
456     checkDeviceMaxMemoryAllocSize(srcSize, type);
457 
458     UMat src1(srcSize, type), src2(srcSize, type),
459             dst(srcSize, type);
460     declare.in(src1, src2, WARMUP_RNG).out(dst);
461 
462     OCL_TEST_CYCLE() cv::phase(src1, src2, dst, 1);
463 
464     SANITY_CHECK(dst, 1e-2);
465 }
466 
467 ///////////// bitwise_and ////////////////////////
468 
469 typedef Size_MatType BitwiseAndFixture;
470 
OCL_PERF_TEST_P(BitwiseAndFixture,Bitwise_and,::testing::Combine (OCL_TEST_SIZES,OCL_TEST_TYPES_134))471 OCL_PERF_TEST_P(BitwiseAndFixture, Bitwise_and,
472             ::testing::Combine(OCL_TEST_SIZES, OCL_TEST_TYPES_134))
473 {
474     const Size_MatType_t params = GetParam();
475     const Size srcSize = get<0>(params);
476     const int type = get<1>(params);
477 
478     checkDeviceMaxMemoryAllocSize(srcSize, type);
479 
480     UMat src1(srcSize, type), src2(srcSize, type), dst(srcSize, type);
481     declare.in(src1, src2, WARMUP_RNG).out(dst);
482 
483     OCL_TEST_CYCLE() cv::bitwise_and(src1, src2, dst);
484 
485     SANITY_CHECK(dst);
486 }
487 
488 ///////////// bitwise_xor ////////////////////////
489 
490 typedef Size_MatType BitwiseXorFixture;
491 
OCL_PERF_TEST_P(BitwiseXorFixture,Bitwise_xor,::testing::Combine (OCL_TEST_SIZES,OCL_TEST_TYPES_134))492 OCL_PERF_TEST_P(BitwiseXorFixture, Bitwise_xor,
493             ::testing::Combine(OCL_TEST_SIZES, OCL_TEST_TYPES_134))
494 {
495     const Size_MatType_t params = GetParam();
496     const Size srcSize = get<0>(params);
497     const int type = get<1>(params);
498 
499     checkDeviceMaxMemoryAllocSize(srcSize, type);
500 
501     UMat src1(srcSize, type), src2(srcSize, type), dst(srcSize, type);
502     declare.in(src1, src2, WARMUP_RNG).out(dst);
503 
504     OCL_TEST_CYCLE() cv::bitwise_xor(src1, src2, dst);
505 
506     SANITY_CHECK(dst);
507 }
508 
509 ///////////// bitwise_or ////////////////////////
510 
511 typedef Size_MatType BitwiseOrFixture;
512 
OCL_PERF_TEST_P(BitwiseOrFixture,Bitwise_or,::testing::Combine (OCL_TEST_SIZES,OCL_TEST_TYPES_134))513 OCL_PERF_TEST_P(BitwiseOrFixture, Bitwise_or,
514             ::testing::Combine(OCL_TEST_SIZES, OCL_TEST_TYPES_134))
515 {
516     const Size_MatType_t params = GetParam();
517     const Size srcSize = get<0>(params);
518     const int type = get<1>(params);
519 
520     checkDeviceMaxMemoryAllocSize(srcSize, type);
521 
522     UMat src1(srcSize, type), src2(srcSize, type), dst(srcSize, type);
523     declare.in(src1, src2, WARMUP_RNG).out(dst);
524 
525     OCL_TEST_CYCLE() cv::bitwise_or(src1, src2, dst);
526 
527     SANITY_CHECK(dst);
528 }
529 
530 ///////////// bitwise_not ////////////////////////
531 
532 typedef Size_MatType BitwiseNotFixture;
533 
OCL_PERF_TEST_P(BitwiseNotFixture,Bitwise_not,::testing::Combine (OCL_TEST_SIZES,OCL_TEST_TYPES_134))534 OCL_PERF_TEST_P(BitwiseNotFixture, Bitwise_not,
535             ::testing::Combine(OCL_TEST_SIZES, OCL_TEST_TYPES_134))
536 {
537     const Size_MatType_t params = GetParam();
538     const Size srcSize = get<0>(params);
539     const int type = get<1>(params);
540 
541     checkDeviceMaxMemoryAllocSize(srcSize, type);
542 
543     UMat src(srcSize, type), dst(srcSize, type);
544     declare.in(src, WARMUP_RNG).out(dst);
545 
546     OCL_TEST_CYCLE() cv::bitwise_not(src, dst);
547 
548     SANITY_CHECK(dst);
549 }
550 
551 ///////////// compare ////////////////////////
552 
553 CV_ENUM(CmpCode, CMP_LT, CMP_LE, CMP_EQ, CMP_NE, CMP_GE, CMP_GT)
554 
555 typedef std::tr1::tuple<Size, MatType, CmpCode> CompareParams;
556 typedef TestBaseWithParam<CompareParams> CompareFixture;
557 
OCL_PERF_TEST_P(CompareFixture,Compare,::testing::Combine (OCL_TEST_SIZES,OCL_TEST_TYPES_134,CmpCode::all ()))558 OCL_PERF_TEST_P(CompareFixture, Compare,
559             ::testing::Combine(OCL_TEST_SIZES,
560                                OCL_TEST_TYPES_134, CmpCode::all()))
561 {
562     const CompareParams params = GetParam();
563     const Size srcSize = get<0>(params);
564     const int type = get<1>(params);
565     const int cmpCode = get<2>(params);
566 
567     checkDeviceMaxMemoryAllocSize(srcSize, type);
568 
569     UMat src1(srcSize, type), src2(srcSize, type), dst(srcSize, CV_8UC(CV_MAT_CN(type)));
570     declare.in(src1, src2, WARMUP_RNG).out(dst);
571 
572     OCL_TEST_CYCLE() cv::compare(src1, src2, dst, cmpCode);
573 
574     SANITY_CHECK(dst);
575 }
576 
577 OCL_PERF_TEST_P(CompareFixture, CompareScalar,
578             ::testing::Combine(OCL_TEST_SIZES,
579                                OCL_PERF_ENUM((MatType)CV_32FC1), // TODO: OCL_TEST_TYPES_134
580                                CmpCode::all()))
581 {
582     const CompareParams params = GetParam();
583     const Size srcSize = get<0>(params);
584     const int type = get<1>(params);
585     const int cmpCode = get<2>(params);
586 
587     checkDeviceMaxMemoryAllocSize(srcSize, type);
588 
589     UMat src1(srcSize, type), dst(srcSize, CV_8UC(CV_MAT_CN(type)));
590     declare.in(src1, WARMUP_RNG).out(dst);
591 
592     OCL_TEST_CYCLE() cv::compare(src1, 32, dst, cmpCode);
593 
594     SANITY_CHECK(dst);
595 }
596 
597 ///////////// pow ////////////////////////
598 
599 typedef Size_MatType PowFixture;
600 
OCL_PERF_TEST_P(PowFixture,Pow,::testing::Combine (OCL_TEST_SIZES,OCL_PERF_ENUM (CV_32FC1,CV_32FC4)))601 OCL_PERF_TEST_P(PowFixture, Pow, ::testing::Combine(
602                 OCL_TEST_SIZES, OCL_PERF_ENUM(CV_32FC1, CV_32FC4)))
603 {
604     const Size_MatType_t params = GetParam();
605     const Size srcSize = get<0>(params);
606     const int type = get<1>(params);
607 
608     checkDeviceMaxMemoryAllocSize(srcSize, type);
609 
610     UMat src(srcSize, type), dst(srcSize, type);
611     randu(src, 0, 100);
612     declare.in(src).out(dst);
613 
614     OCL_TEST_CYCLE() cv::pow(src, 2.17, dst);
615 
616     SANITY_CHECK(dst, 1.5e-6, ERROR_RELATIVE);
617 }
618 
619 ///////////// AddWeighted////////////////////////
620 
621 typedef Size_MatType AddWeightedFixture;
622 
OCL_PERF_TEST_P(AddWeightedFixture,AddWeighted,::testing::Combine (OCL_TEST_SIZES,OCL_TEST_TYPES_134))623 OCL_PERF_TEST_P(AddWeightedFixture, AddWeighted,
624             ::testing::Combine(OCL_TEST_SIZES, OCL_TEST_TYPES_134))
625 {
626     const Size_MatType_t params = GetParam();
627     const Size srcSize = get<0>(params);
628     const int type = get<1>(params), depth = CV_MAT_DEPTH(type);
629 
630     checkDeviceMaxMemoryAllocSize(srcSize, type);
631 
632     UMat src1(srcSize, type), src2(srcSize, type), dst(srcSize, type);
633     declare.in(src1, src2, WARMUP_RNG).out(dst);
634     double alpha = 2.0, beta = 1.0, gama = 3.0;
635 
636     OCL_TEST_CYCLE() cv::addWeighted(src1, alpha, src2, beta, gama, dst);
637 
638     if (depth >= CV_32F)
639         SANITY_CHECK(dst, 1e-6, ERROR_RELATIVE);
640     else
641         SANITY_CHECK(dst);
642 }
643 
644 ///////////// Sqrt ///////////////////////
645 
646 typedef Size_MatType SqrtFixture;
647 
OCL_PERF_TEST_P(SqrtFixture,Sqrt,::testing::Combine (OCL_TEST_SIZES,OCL_PERF_ENUM (CV_32FC1,CV_32FC4)))648 OCL_PERF_TEST_P(SqrtFixture, Sqrt, ::testing::Combine(
649                 OCL_TEST_SIZES, OCL_PERF_ENUM(CV_32FC1, CV_32FC4)))
650 {
651     const Size_MatType_t params = GetParam();
652     const Size srcSize = get<0>(params);
653     const int type = get<1>(params);
654 
655     checkDeviceMaxMemoryAllocSize(srcSize, type);
656 
657     UMat src(srcSize, type), dst(srcSize, type);
658     randu(src, 0, 1000);
659     declare.in(src).out(dst);
660 
661     OCL_TEST_CYCLE() cv::sqrt(src, dst);
662 
663     SANITY_CHECK(dst, 1e-6, ERROR_RELATIVE);
664 }
665 
666 ///////////// SetIdentity ////////////////////////
667 
668 typedef Size_MatType SetIdentityFixture;
669 
OCL_PERF_TEST_P(SetIdentityFixture,SetIdentity,::testing::Combine (OCL_TEST_SIZES,OCL_TEST_TYPES))670 OCL_PERF_TEST_P(SetIdentityFixture, SetIdentity,
671             ::testing::Combine(OCL_TEST_SIZES, OCL_TEST_TYPES))
672 {
673     const Size_MatType_t params = GetParam();
674     const Size srcSize = get<0>(params);
675     const int type = get<1>(params);
676 
677     checkDeviceMaxMemoryAllocSize(srcSize, type);
678 
679     UMat dst(srcSize, type);
680     declare.out(dst);
681 
682     OCL_TEST_CYCLE() cv::setIdentity(dst, cv::Scalar::all(181));
683 
684     SANITY_CHECK(dst);
685 }
686 
687 ///////////// MeanStdDev ////////////////////////
688 
689 typedef Size_MatType MeanStdDevFixture;
690 
OCL_PERF_TEST_P(MeanStdDevFixture,MeanStdDev,::testing::Combine (OCL_PERF_ENUM (OCL_SIZE_1,OCL_SIZE_2,OCL_SIZE_3),OCL_TEST_TYPES_134))691 OCL_PERF_TEST_P(MeanStdDevFixture, MeanStdDev,
692                 ::testing::Combine(OCL_PERF_ENUM(OCL_SIZE_1, OCL_SIZE_2, OCL_SIZE_3),
693                                    OCL_TEST_TYPES_134))
694 {
695     const Size_MatType_t params = GetParam();
696     const Size srcSize = get<0>(params);
697     const int type = get<1>(params);
698     const double eps = 2e-5;
699 
700     checkDeviceMaxMemoryAllocSize(srcSize, type);
701 
702     UMat src(srcSize, type);
703     Scalar mean, stddev;
704     declare.in(src, WARMUP_RNG);
705 
706     OCL_TEST_CYCLE() cv::meanStdDev(src, mean, stddev);
707 
708     double mean0 = mean[0], mean1 = mean[1], mean2 = mean[2], mean3 = mean[3];
709     double stddev0 = stddev[0], stddev1 = stddev[1], stddev2 = stddev[2], stddev3 = stddev[3];
710 
711     SANITY_CHECK(mean0, eps, ERROR_RELATIVE);
712     SANITY_CHECK(mean1, eps, ERROR_RELATIVE);
713     SANITY_CHECK(mean2, eps, ERROR_RELATIVE);
714     SANITY_CHECK(mean3, eps, ERROR_RELATIVE);
715     SANITY_CHECK(stddev0, eps, ERROR_RELATIVE);
716     SANITY_CHECK(stddev1, eps, ERROR_RELATIVE);
717     SANITY_CHECK(stddev2, eps, ERROR_RELATIVE);
718     SANITY_CHECK(stddev3, eps, ERROR_RELATIVE);
719 }
720 
OCL_PERF_TEST_P(MeanStdDevFixture,MeanStdDevWithMask,::testing::Combine (OCL_PERF_ENUM (OCL_SIZE_1,OCL_SIZE_2,OCL_SIZE_3),OCL_TEST_TYPES_134))721 OCL_PERF_TEST_P(MeanStdDevFixture, MeanStdDevWithMask,
722                 ::testing::Combine(OCL_PERF_ENUM(OCL_SIZE_1, OCL_SIZE_2, OCL_SIZE_3),
723                                    OCL_TEST_TYPES_134))
724 {
725     const Size_MatType_t params = GetParam();
726     const Size srcSize = get<0>(params);
727     const int type = get<1>(params);
728     const double eps = 2e-5;
729 
730     checkDeviceMaxMemoryAllocSize(srcSize, type);
731 
732     UMat src(srcSize, type), mask(srcSize, CV_8UC1);
733     Scalar mean, stddev;
734     declare.in(src, mask, WARMUP_RNG);
735 
736     OCL_TEST_CYCLE() cv::meanStdDev(src, mean, stddev, mask);
737 
738     double mean0 = mean[0], mean1 = mean[1], mean2 = mean[2], mean3 = mean[3];
739     double stddev0 = stddev[0], stddev1 = stddev[1], stddev2 = stddev[2], stddev3 = stddev[3];
740 
741     SANITY_CHECK(mean0, eps, ERROR_RELATIVE);
742     SANITY_CHECK(mean1, eps, ERROR_RELATIVE);
743     SANITY_CHECK(mean2, eps, ERROR_RELATIVE);
744     SANITY_CHECK(mean3, eps, ERROR_RELATIVE);
745     SANITY_CHECK(stddev0, eps, ERROR_RELATIVE);
746     SANITY_CHECK(stddev1, eps, ERROR_RELATIVE);
747     SANITY_CHECK(stddev2, eps, ERROR_RELATIVE);
748     SANITY_CHECK(stddev3, eps, ERROR_RELATIVE);
749 }
750 
751 ///////////// Norm ////////////////////////
752 
753 CV_ENUM(NormType, NORM_INF, NORM_L1, NORM_L2)
754 
755 typedef std::tr1::tuple<Size, MatType, NormType> NormParams;
756 typedef TestBaseWithParam<NormParams> NormFixture;
757 
OCL_PERF_TEST_P(NormFixture,Norm1Arg,::testing::Combine (OCL_PERF_ENUM (OCL_SIZE_1,OCL_SIZE_2,OCL_SIZE_3),OCL_TEST_TYPES_134,NormType::all ()))758 OCL_PERF_TEST_P(NormFixture, Norm1Arg,
759                 ::testing::Combine(OCL_PERF_ENUM(OCL_SIZE_1, OCL_SIZE_2, OCL_SIZE_3),
760                                    OCL_TEST_TYPES_134, NormType::all()))
761 {
762     const NormParams params = GetParam();
763     const Size srcSize = get<0>(params);
764     const int type = get<1>(params);
765     const int normType = get<2>(params);
766 
767     checkDeviceMaxMemoryAllocSize(srcSize, type);
768 
769     UMat src1(srcSize, type);
770     double res;
771     declare.in(src1, WARMUP_RNG);
772 
773     OCL_TEST_CYCLE() res = cv::norm(src1, normType);
774 
775     SANITY_CHECK(res, 1e-5, ERROR_RELATIVE);
776 }
777 
OCL_PERF_TEST_P(NormFixture,Norm,::testing::Combine (OCL_PERF_ENUM (OCL_SIZE_1,OCL_SIZE_2,OCL_SIZE_3),OCL_TEST_TYPES_134,NormType::all ()))778 OCL_PERF_TEST_P(NormFixture, Norm,
779                 ::testing::Combine(OCL_PERF_ENUM(OCL_SIZE_1, OCL_SIZE_2, OCL_SIZE_3),
780                                    OCL_TEST_TYPES_134, NormType::all()))
781 {
782     const NormParams params = GetParam();
783     const Size srcSize = get<0>(params);
784     const int type = get<1>(params);
785     const int normType = get<2>(params);
786 
787     checkDeviceMaxMemoryAllocSize(srcSize, type);
788 
789     UMat src1(srcSize, type), src2(srcSize, type);
790     double res;
791     declare.in(src1, src2, WARMUP_RNG);
792 
793     OCL_TEST_CYCLE() res = cv::norm(src1, src2, normType);
794 
795     SANITY_CHECK(res, 1e-5, ERROR_RELATIVE);
796 }
797 
OCL_PERF_TEST_P(NormFixture,NormRel,::testing::Combine (OCL_PERF_ENUM (OCL_SIZE_1,OCL_SIZE_2,OCL_SIZE_3),OCL_TEST_TYPES_134,NormType::all ()))798 OCL_PERF_TEST_P(NormFixture, NormRel,
799                 ::testing::Combine(OCL_PERF_ENUM(OCL_SIZE_1, OCL_SIZE_2, OCL_SIZE_3),
800                                    OCL_TEST_TYPES_134, NormType::all()))
801 {
802     const NormParams params = GetParam();
803     const Size srcSize = get<0>(params);
804     const int type = get<1>(params);
805     const int normType = get<2>(params);
806 
807     checkDeviceMaxMemoryAllocSize(srcSize, type);
808 
809     UMat src1(srcSize, type), src2(srcSize, type);
810     double res;
811     declare.in(src1, src2, WARMUP_RNG);
812 
813     OCL_TEST_CYCLE() res = cv::norm(src1, src2, normType | cv::NORM_RELATIVE);
814 
815     SANITY_CHECK(res, 1e-5, ERROR_RELATIVE);
816 }
817 
818 ///////////// UMat::dot ////////////////////////
819 
820 typedef Size_MatType UMatDotFixture;
821 
OCL_PERF_TEST_P(UMatDotFixture,UMatDot,::testing::Combine (OCL_PERF_ENUM (OCL_SIZE_1,OCL_SIZE_2,OCL_SIZE_3),OCL_TEST_TYPES_134))822 OCL_PERF_TEST_P(UMatDotFixture, UMatDot,
823             ::testing::Combine(OCL_PERF_ENUM(OCL_SIZE_1, OCL_SIZE_2, OCL_SIZE_3),
824                                OCL_TEST_TYPES_134))
825 {
826     const Size_MatType_t params = GetParam();
827     const Size srcSize = get<0>(params);
828     const int type = get<1>(params);
829     double r = 0.0;
830 
831     checkDeviceMaxMemoryAllocSize(srcSize, type);
832 
833     UMat src1(srcSize, type), src2(srcSize, type);
834     declare.in(src1, src2, WARMUP_RNG);
835 
836     OCL_TEST_CYCLE() r = src1.dot(src2);
837 
838     SANITY_CHECK(r, 1e-5, ERROR_RELATIVE);
839 }
840 
841 ///////////// Repeat ////////////////////////
842 
843 typedef Size_MatType RepeatFixture;
844 
OCL_PERF_TEST_P(RepeatFixture,Repeat,::testing::Combine (OCL_PERF_ENUM (OCL_SIZE_1,OCL_SIZE_2,OCL_SIZE_3),OCL_TEST_TYPES))845 OCL_PERF_TEST_P(RepeatFixture, Repeat,
846             ::testing::Combine(OCL_PERF_ENUM(OCL_SIZE_1, OCL_SIZE_2, OCL_SIZE_3), OCL_TEST_TYPES))
847 {
848     const Size_MatType_t params = GetParam();
849     const Size srcSize = get<0>(params);
850     const int type = get<1>(params), nx = 2, ny = 2;
851 
852     checkDeviceMaxMemoryAllocSize(srcSize, type);
853 
854     UMat src(srcSize, type), dst(Size(srcSize.width * nx, srcSize.height * ny), type);
855     declare.in(src, WARMUP_RNG).out(dst);
856 
857     OCL_TEST_CYCLE() cv::repeat(src, nx, ny, dst);
858 
859     SANITY_CHECK(dst);
860 }
861 
862 ///////////// Min ////////////////////////
863 
864 typedef Size_MatType MinFixture;
865 
OCL_PERF_TEST_P(MinFixture,Min,::testing::Combine (OCL_TEST_SIZES,OCL_TEST_TYPES))866 OCL_PERF_TEST_P(MinFixture, Min,
867                 ::testing::Combine(OCL_TEST_SIZES, OCL_TEST_TYPES))
868 {
869     const Size_MatType_t params = GetParam();
870     const Size srcSize = get<0>(params);
871     const int type = get<1>(params);
872 
873     checkDeviceMaxMemoryAllocSize(srcSize, type);
874 
875     UMat src1(srcSize, type), src2(srcSize, type), dst(srcSize, type);
876     declare.in(src1, src2, WARMUP_RNG).out(dst);
877 
878     OCL_TEST_CYCLE() cv::min(src1, src2, dst);
879 
880     SANITY_CHECK(dst);
881 }
882 
883 ///////////// Max ////////////////////////
884 
885 typedef Size_MatType MaxFixture;
886 
OCL_PERF_TEST_P(MaxFixture,Max,::testing::Combine (OCL_TEST_SIZES,OCL_TEST_TYPES))887 OCL_PERF_TEST_P(MaxFixture, Max,
888                 ::testing::Combine(OCL_TEST_SIZES, OCL_TEST_TYPES))
889 {
890     const Size_MatType_t params = GetParam();
891     const Size srcSize = get<0>(params);
892     const int type = get<1>(params);
893 
894     checkDeviceMaxMemoryAllocSize(srcSize, type);
895 
896     UMat src1(srcSize, type), src2(srcSize, type), dst(srcSize, type);
897     declare.in(src1, src2, WARMUP_RNG).out(dst);
898 
899     OCL_TEST_CYCLE() cv::max(src1, src2, dst);
900 
901     SANITY_CHECK(dst);
902 }
903 
904 ///////////// InRange ////////////////////////
905 
906 typedef Size_MatType InRangeFixture;
907 
OCL_PERF_TEST_P(InRangeFixture,InRange,::testing::Combine (OCL_TEST_SIZES,OCL_TEST_TYPES))908 OCL_PERF_TEST_P(InRangeFixture, InRange,
909                 ::testing::Combine(OCL_TEST_SIZES, OCL_TEST_TYPES))
910 {
911     const Size_MatType_t params = GetParam();
912     const Size srcSize = get<0>(params);
913     const int type = get<1>(params);
914 
915     checkDeviceMaxMemoryAllocSize(srcSize, type);
916 
917     UMat src(srcSize, type), lb(srcSize, type), ub(srcSize, type), dst(srcSize, CV_8UC1);
918     declare.in(src, lb, ub, WARMUP_RNG).out(dst);
919 
920     OCL_TEST_CYCLE() cv::inRange(src, lb, ub, dst);
921 
922     SANITY_CHECK(dst);
923 }
924 
925 ///////////// Normalize ////////////////////////
926 
927 CV_ENUM(NormalizeModes, CV_MINMAX, CV_L2, CV_L1, CV_C)
928 
929 typedef tuple<Size, MatType, NormalizeModes> NormalizeParams;
930 typedef TestBaseWithParam<NormalizeParams> NormalizeFixture;
931 
OCL_PERF_TEST_P(NormalizeFixture,Normalize,::testing::Combine (OCL_TEST_SIZES,OCL_TEST_TYPES_134,NormalizeModes::all ()))932 OCL_PERF_TEST_P(NormalizeFixture, Normalize,
933                 ::testing::Combine(OCL_TEST_SIZES, OCL_TEST_TYPES_134,
934                                    NormalizeModes::all()))
935 {
936     const NormalizeParams params = GetParam();
937     const Size srcSize = get<0>(params);
938     const int type = get<1>(params), mode = get<2>(params);
939 
940     checkDeviceMaxMemoryAllocSize(srcSize, type);
941 
942     UMat src(srcSize, type), dst(srcSize, type);
943     declare.in(src, WARMUP_RNG).out(dst);
944 
945     OCL_TEST_CYCLE() cv::normalize(src, dst, 10, 110, mode);
946 
947     SANITY_CHECK(dst, 5e-2);
948 }
949 
OCL_PERF_TEST_P(NormalizeFixture,NormalizeWithMask,::testing::Combine (OCL_TEST_SIZES,OCL_PERF_ENUM (CV_8UC1,CV_32FC1),NormalizeModes::all ()))950 OCL_PERF_TEST_P(NormalizeFixture, NormalizeWithMask,
951                 ::testing::Combine(OCL_TEST_SIZES, OCL_PERF_ENUM(CV_8UC1, CV_32FC1),
952                                    NormalizeModes::all()))
953 {
954     const NormalizeParams params = GetParam();
955     const Size srcSize = get<0>(params);
956     const int type = get<1>(params), mode = get<2>(params);
957 
958     checkDeviceMaxMemoryAllocSize(srcSize, type);
959 
960     UMat src(srcSize, type), mask(srcSize, CV_8UC1), dst(srcSize, type);
961     declare.in(src, mask, WARMUP_RNG).out(dst);
962 
963     OCL_TEST_CYCLE() cv::normalize(src, dst, 10, 110, mode, -1, mask);
964 
965     SANITY_CHECK(dst, 5e-2);
966 }
967 
968 ///////////// ConvertScaleAbs ////////////////////////
969 
970 typedef Size_MatType ConvertScaleAbsFixture;
971 
OCL_PERF_TEST_P(ConvertScaleAbsFixture,ConvertScaleAbs,::testing::Combine (OCL_TEST_SIZES,OCL_TEST_TYPES))972 OCL_PERF_TEST_P(ConvertScaleAbsFixture, ConvertScaleAbs,
973                 ::testing::Combine(OCL_TEST_SIZES, OCL_TEST_TYPES))
974 {
975     const Size_MatType_t params = GetParam();
976     const Size srcSize = get<0>(params);
977     const int type = get<1>(params), cn = CV_MAT_CN(type);
978 
979     checkDeviceMaxMemoryAllocSize(srcSize, type);
980 
981     UMat src(srcSize, type), dst(srcSize, CV_8UC(cn));
982     declare.in(src, WARMUP_RNG).out(dst);
983 
984     OCL_TEST_CYCLE() cv::convertScaleAbs(src, dst, 0.5, 2);
985 
986     SANITY_CHECK(dst);
987 }
988 
989 ///////////// PatchNaNs ////////////////////////
990 
991 typedef Size_MatType PatchNaNsFixture;
992 
OCL_PERF_TEST_P(PatchNaNsFixture,PatchNaNs,::testing::Combine (OCL_TEST_SIZES,OCL_PERF_ENUM (CV_32FC1,CV_32FC4)))993 OCL_PERF_TEST_P(PatchNaNsFixture, PatchNaNs,
994                 ::testing::Combine(OCL_TEST_SIZES, OCL_PERF_ENUM(CV_32FC1, CV_32FC4)))
995 {
996     const Size_MatType_t params = GetParam();
997     Size srcSize = get<0>(params);
998     const int type = get<1>(params), cn = CV_MAT_CN(type);
999 
1000     checkDeviceMaxMemoryAllocSize(srcSize, type);
1001 
1002     UMat src(srcSize, type);
1003     declare.in(src, WARMUP_RNG).out(src);
1004 
1005     // generating NaNs
1006     {
1007         Mat src_ = src.getMat(ACCESS_RW);
1008         srcSize.width *= cn;
1009         for (int y = 0; y < srcSize.height; ++y)
1010         {
1011             float * const ptr = src_.ptr<float>(y);
1012             for (int x = 0; x < srcSize.width; ++x)
1013                 ptr[x] = (x + y) % 2 == 0 ? std::numeric_limits<float>::quiet_NaN() : ptr[x];
1014         }
1015     }
1016 
1017     OCL_TEST_CYCLE() cv::patchNaNs(src, 17.7);
1018 
1019     SANITY_CHECK(src);
1020 }
1021 
1022 
1023 ///////////// ScaleAdd ////////////////////////
1024 
1025 typedef Size_MatType ScaleAddFixture;
1026 
OCL_PERF_TEST_P(ScaleAddFixture,ScaleAdd,::testing::Combine (OCL_TEST_SIZES,OCL_TEST_TYPES))1027 OCL_PERF_TEST_P(ScaleAddFixture, ScaleAdd,
1028                 ::testing::Combine(OCL_TEST_SIZES, OCL_TEST_TYPES))
1029 {
1030     const Size_MatType_t params = GetParam();
1031     const Size srcSize = get<0>(params);
1032     const int type = get<1>(params);
1033 
1034     checkDeviceMaxMemoryAllocSize(srcSize, type);
1035 
1036     UMat src1(srcSize, type), src2(srcSize, type), dst(srcSize, type);
1037     declare.in(src1, src2, WARMUP_RNG).out(dst);
1038 
1039     OCL_TEST_CYCLE() cv::scaleAdd(src1, 0.6, src2, dst);
1040 
1041     SANITY_CHECK(dst, 1e-6);
1042 }
1043 
1044 ///////////// PSNR ////////////////////////
1045 
1046 typedef Size_MatType PSNRFixture;
1047 
OCL_PERF_TEST_P(PSNRFixture,PSNR,::testing::Combine (OCL_TEST_SIZES,OCL_PERF_ENUM (CV_8UC1,CV_8UC4)))1048 OCL_PERF_TEST_P(PSNRFixture, PSNR,
1049                 ::testing::Combine(OCL_TEST_SIZES, OCL_PERF_ENUM(CV_8UC1, CV_8UC4)))
1050 {
1051     const Size_MatType_t params = GetParam();
1052     const Size srcSize = get<0>(params);
1053     const int type = get<1>(params);
1054 
1055     checkDeviceMaxMemoryAllocSize(srcSize, type);
1056 
1057     double psnr = 0;
1058     UMat src1(srcSize, type), src2(srcSize, type);
1059     declare.in(src1, src2, WARMUP_RNG);
1060 
1061     OCL_TEST_CYCLE() psnr = cv::PSNR(src1, src2);
1062 
1063     SANITY_CHECK(psnr, 1e-4, ERROR_RELATIVE);
1064 }
1065 
1066 ///////////// Reduce ////////////////////////
1067 
1068 CV_ENUM(ReduceMinMaxOp, CV_REDUCE_MIN, CV_REDUCE_MAX)
1069 
1070 typedef tuple<Size, std::pair<MatType, MatType>, int, ReduceMinMaxOp> ReduceMinMaxParams;
1071 typedef TestBaseWithParam<ReduceMinMaxParams> ReduceMinMaxFixture;
1072 
1073 OCL_PERF_TEST_P(ReduceMinMaxFixture, Reduce,
1074                 ::testing::Combine(OCL_TEST_SIZES,
1075                                    OCL_PERF_ENUM(std::make_pair<MatType, MatType>(CV_8UC1, CV_8UC1),
1076                                                  std::make_pair<MatType, MatType>(CV_32FC4, CV_32FC4)),
1077                                    OCL_PERF_ENUM(0, 1),
1078                                    ReduceMinMaxOp::all()))
1079 {
1080     const ReduceMinMaxParams params = GetParam();
1081     const std::pair<MatType, MatType> types = get<1>(params);
1082     const int stype = types.first, dtype = types.second,
1083             dim = get<2>(params), op = get<3>(params);
1084     const Size srcSize = get<0>(params),
1085             dstSize(dim == 0 ? srcSize.width : 1, dim == 0 ? 1 : srcSize.height);
1086     const double eps = CV_MAT_DEPTH(dtype) <= CV_32S ? 1 : 1e-5;
1087 
1088     checkDeviceMaxMemoryAllocSize(srcSize, stype);
1089     checkDeviceMaxMemoryAllocSize(srcSize, dtype);
1090 
1091     UMat src(srcSize, stype), dst(dstSize, dtype);
1092     declare.in(src, WARMUP_RNG).out(dst);
1093 
1094     OCL_TEST_CYCLE() cv::reduce(src, dst, dim, op, dtype);
1095 
1096     SANITY_CHECK(dst, eps);
1097 }
1098 
1099 CV_ENUM(ReduceAccOp, CV_REDUCE_SUM, CV_REDUCE_AVG)
1100 
1101 typedef tuple<Size, std::pair<MatType, MatType>, int, ReduceAccOp> ReduceAccParams;
1102 typedef TestBaseWithParam<ReduceAccParams> ReduceAccFixture;
1103 
1104 OCL_PERF_TEST_P(ReduceAccFixture, Reduce,
1105                 ::testing::Combine(OCL_TEST_SIZES,
1106                                    OCL_PERF_ENUM(std::make_pair<MatType, MatType>(CV_8UC4, CV_32SC4),
1107                                                  std::make_pair<MatType, MatType>(CV_32FC1, CV_32FC1)),
1108                                    OCL_PERF_ENUM(0, 1),
1109                                    ReduceAccOp::all()))
1110 {
1111     const ReduceAccParams params = GetParam();
1112     const std::pair<MatType, MatType> types = get<1>(params);
1113     const int stype = types.first, dtype = types.second,
1114             dim = get<2>(params), op = get<3>(params);
1115     const Size srcSize = get<0>(params),
1116             dstSize(dim == 0 ? srcSize.width : 1, dim == 0 ? 1 : srcSize.height);
1117     const double eps = CV_MAT_DEPTH(dtype) <= CV_32S ? 1 : 3e-4;
1118 
1119     checkDeviceMaxMemoryAllocSize(srcSize, stype);
1120     checkDeviceMaxMemoryAllocSize(srcSize, dtype);
1121 
1122     UMat src(srcSize, stype), dst(dstSize, dtype);
1123     declare.in(src, WARMUP_RNG).out(dst);
1124 
1125     OCL_TEST_CYCLE() cv::reduce(src, dst, dim, op, dtype);
1126 
1127     SANITY_CHECK(dst, eps);
1128 }
1129 
1130 } } // namespace cvtest::ocl
1131 
1132 #endif // HAVE_OPENCL
1133