Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
seo young Joung
opencv
Commits
da8dbf6c
Commit
da8dbf6c
authored
7 years ago
by
Alexander Alekhin
Browse files
Options
Download
Email Patches
Plain Diff
ocl: async cl_buffer cleanup queue (for event callback)
parent
34046ec6
4.x
3.4
5.x
master
next
4.5.5
4.5.4
4.5.3
4.5.3-openvino
4.5.3-openvino-2021.4.2
4.5.3-openvino-2021.4.1
4.5.2
4.5.2-openvino
4.5.1
4.5.1-openvino
4.5.0
4.5.0-openvino
4.4.0
4.4.0-openvino
4.3.0
4.3.0-openvino
4.3.0-openvino-2020.3.0
4.2.0
4.2.0-openvino
4.1.2
4.1.2-openvino
4.1.1
4.1.1-openvino
4.1.0
4.1.0-openvino
4.0.1
4.0.1-openvino
4.0.0
4.0.0-rc
4.0.0-openvino
4.0.0-beta
4.0.0-alpha
3.4.17
3.4.16
3.4.15
3.4.14
3.4.13
3.4.12
3.4.11
3.4.10
3.4.9
3.4.8
3.4.7
3.4.6
3.4.5
3.4.4
3.4.3
3.4.3-openvino
3.4.2
3.4.2-openvino
3.4.1
3.4.1-cvsdk
3.4.0
3.4.0-rc
3.3.1
3.3.1-cvsdk
3.3.0
3.3.0-rc
3.3.0-cvsdk
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
modules/core/include/opencv2/core/mat.hpp
+3
-1
modules/core/include/opencv2/core/mat.hpp
modules/core/src/ocl.cpp
+47
-0
modules/core/src/ocl.cpp
with
50 additions
and
1 deletion
+50
-1
modules/core/include/opencv2/core/mat.hpp
View file @
da8dbf6c
...
...
@@ -497,7 +497,9 @@ struct CV_EXPORTS UMatData
{
enum
{
COPY_ON_MAP
=
1
,
HOST_COPY_OBSOLETE
=
2
,
DEVICE_COPY_OBSOLETE
=
4
,
TEMP_UMAT
=
8
,
TEMP_COPIED_UMAT
=
24
,
USER_ALLOCATED
=
32
,
DEVICE_MEM_MAPPED
=
64
};
USER_ALLOCATED
=
32
,
DEVICE_MEM_MAPPED
=
64
,
ASYNC_CLEANUP
=
128
};
UMatData
(
const
MatAllocator
*
allocator
);
~
UMatData
();
...
...
This diff is collapsed.
Click to expand it.
modules/core/src/ocl.cpp
View file @
da8dbf6c
...
...
@@ -42,6 +42,7 @@
#include "precomp.hpp"
#include <list>
#include <map>
#include <deque>
#include <string>
#include <sstream>
#include <iostream> // std::cerr
...
...
@@ -1983,7 +1984,10 @@ struct Kernel::Impl
if
(
u
[
i
]
)
{
if
(
CV_XADD
(
&
u
[
i
]
->
urefcount
,
-
1
)
==
1
)
{
u
[
i
]
->
flags
|=
UMatData
::
ASYNC_CLEANUP
;
u
[
i
]
->
currAllocator
->
deallocate
(
u
[
i
]);
}
u
[
i
]
=
0
;
}
nu
=
0
;
...
...
@@ -3157,6 +3161,10 @@ public:
matStdAllocator
=
Mat
::
getDefaultAllocator
();
}
~
OpenCLAllocator
()
{
flushCleanupQueue
();
}
UMatData
*
defaultAllocate
(
int
dims
,
const
int
*
sizes
,
int
type
,
void
*
data
,
size_t
*
step
,
int
flags
,
UMatUsageFlags
usageFlags
)
const
...
...
@@ -3193,6 +3201,7 @@ public:
}
Context
&
ctx
=
Context
::
getDefault
();
flushCleanupQueue
();
int
createFlags
=
0
,
flags0
=
0
;
getBestFlags
(
ctx
,
flags
,
usageFlags
,
createFlags
,
flags0
);
...
...
@@ -3247,6 +3256,8 @@ public:
if
(
!
u
)
return
false
;
flushCleanupQueue
();
UMatDataAutoLock
lock
(
u
);
if
(
u
->
handle
==
0
)
...
...
@@ -3381,6 +3392,15 @@ public:
CV_Assert
(
u
->
handle
!=
0
);
CV_Assert
(
u
->
mapcount
==
0
);
if
(
u
->
flags
&
UMatData
::
ASYNC_CLEANUP
)
addToCleanupQueue
(
u
);
else
deallocate_
(
u
);
}
void
deallocate_
(
UMatData
*
u
)
const
{
if
(
u
->
tempUMat
())
{
CV_Assert
(
u
->
origdata
);
...
...
@@ -4184,6 +4204,33 @@ public:
}
MatAllocator
*
matStdAllocator
;
mutable
cv
::
Mutex
cleanupQueueMutex
;
mutable
std
::
deque
<
UMatData
*>
cleanupQueue
;
void
flushCleanupQueue
()
const
{
if
(
!
cleanupQueue
.
empty
())
{
std
::
deque
<
UMatData
*>
q
;
{
cv
::
AutoLock
lock
(
cleanupQueueMutex
);
q
.
swap
(
cleanupQueue
);
}
for
(
std
::
deque
<
UMatData
*>::
const_iterator
i
=
q
.
begin
();
i
!=
q
.
end
();
++
i
)
{
deallocate_
(
*
i
);
}
}
}
void
addToCleanupQueue
(
UMatData
*
u
)
const
{
//TODO: Validation check: CV_Assert(!u->tempUMat());
{
cv
::
AutoLock
lock
(
cleanupQueueMutex
);
cleanupQueue
.
push_back
(
u
);
}
}
};
MatAllocator
*
getOpenCLAllocator
()
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment
Menu
Projects
Groups
Snippets
Help