Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Tetragramm
GitHub Repository: Tetragramm/opencv
Path: blob/master/modules/core/perf/opencl/perf_bufferpool.cpp
16358 views
1
// This file is part of OpenCV project.
2
// It is subject to the license terms in the LICENSE file found in the top-level directory
3
// of this distribution and at http://opencv.org/license.html.
4
//
5
// Copyright (C) 2014, Advanced Micro Devices, Inc., all rights reserved.
6
7
#include "../perf_precomp.hpp"
8
#include "opencv2/ts/ocl_perf.hpp"
9
10
#ifdef HAVE_OPENCL
11
12
namespace opencv_test {
13
namespace ocl {
14
15
struct BufferPoolState
16
{
17
BufferPoolController* controller_;
18
size_t oldMaxReservedSize_;
19
20
BufferPoolState(BufferPoolController* c, bool enable)
21
: controller_(c)
22
{
23
if (!cv::ocl::useOpenCL())
24
{
25
throw ::perf::TestBase::PerfSkipTestException();
26
}
27
oldMaxReservedSize_ = c->getMaxReservedSize();
28
if (oldMaxReservedSize_ == (size_t)-1)
29
{
30
throw ::perf::TestBase::PerfSkipTestException();
31
}
32
if (!enable)
33
{
34
c->setMaxReservedSize(0);
35
}
36
else
37
{
38
c->freeAllReservedBuffers();
39
}
40
}
41
42
~BufferPoolState()
43
{
44
controller_->setMaxReservedSize(oldMaxReservedSize_);
45
}
46
};
47
48
typedef TestBaseWithParam<bool> BufferPoolFixture;
49
50
OCL_PERF_TEST_P(BufferPoolFixture, BufferPool_UMatCreation100, Bool())
51
{
52
BufferPoolState s(cv::ocl::getOpenCLAllocator()->getBufferPoolController(), GetParam());
53
54
Size sz(1920, 1080);
55
56
OCL_TEST_CYCLE()
57
{
58
for (int i = 0; i < 100; i++)
59
{
60
UMat u(sz, CV_8UC1);
61
}
62
}
63
64
SANITY_CHECK_NOTHING();
65
}
66
67
OCL_PERF_TEST_P(BufferPoolFixture, BufferPool_UMatCountNonZero100, Bool())
68
{
69
BufferPoolState s(cv::ocl::getOpenCLAllocator()->getBufferPoolController(), GetParam());
70
71
Size sz(1920, 1080);
72
73
OCL_TEST_CYCLE()
74
{
75
for (int i = 0; i < 100; i++)
76
{
77
UMat u(sz, CV_8UC1);
78
countNonZero(u);
79
}
80
}
81
82
SANITY_CHECK_NOTHING();
83
}
84
85
OCL_PERF_TEST_P(BufferPoolFixture, BufferPool_UMatCanny10, Bool())
86
{
87
BufferPoolState s(cv::ocl::getOpenCLAllocator()->getBufferPoolController(), GetParam());
88
89
Size sz(1920, 1080);
90
91
int aperture = 3;
92
bool useL2 = false;
93
double thresh_low = 100;
94
double thresh_high = 120;
95
96
OCL_TEST_CYCLE()
97
{
98
for (int i = 0; i < 10; i++)
99
{
100
UMat src(sz, CV_8UC1);
101
UMat dst;
102
Canny(src, dst, thresh_low, thresh_high, aperture, useL2);
103
dst.getMat(ACCESS_READ); // complete async operations
104
}
105
}
106
107
SANITY_CHECK_NOTHING();
108
}
109
110
OCL_PERF_TEST_P(BufferPoolFixture, BufferPool_UMatIntegral10, Bool())
111
{
112
BufferPoolState s(cv::ocl::getOpenCLAllocator()->getBufferPoolController(), GetParam());
113
114
Size sz(1920, 1080);
115
116
OCL_TEST_CYCLE()
117
{
118
for (int i = 0; i < 10; i++)
119
{
120
UMat src(sz, CV_32FC1);
121
UMat dst;
122
integral(src, dst);
123
dst.getMat(ACCESS_READ); // complete async operations
124
}
125
}
126
127
SANITY_CHECK_NOTHING();
128
}
129
130
} } // namespace opencv_test::ocl
131
132
#endif // HAVE_OPENCL
133
134