Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Greenplum
Opencv
提交
cddf8685
O
Opencv
项目概览
Greenplum
/
Opencv
大约 1 年 前同步成功
通知
7
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
O
Opencv
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
cddf8685
编写于
7月 07, 2017
作者:
M
Maksim Shabunin
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #9115 from alalek:ocl_async_cleanup_queue
上级
34046ec6
da8dbf6c
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
50 addition
and
1 deletion
+50
-1
modules/core/include/opencv2/core/mat.hpp
modules/core/include/opencv2/core/mat.hpp
+3
-1
modules/core/src/ocl.cpp
modules/core/src/ocl.cpp
+47
-0
未找到文件。
modules/core/include/opencv2/core/mat.hpp
浏览文件 @
cddf8685
...
...
@@ -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
();
...
...
modules/core/src/ocl.cpp
浏览文件 @
cddf8685
...
...
@@ -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
()
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录