Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Xiaomi
Mace
提交
7efde524
Mace
项目概览
Xiaomi
/
Mace
通知
106
Star
40
Fork
27
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
Mace
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
7efde524
编写于
3月 30, 2018
作者:
刘
刘琦
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'improve-opencl-errorcode' into 'master'
Improve opencl error code See merge request !340
上级
154472d8
a5377516
变更
8
隐藏空白更改
内联
并排
Showing
8 changed file
with
158 addition
and
22 deletion
+158
-22
mace/core/runtime/opencl/opencl_allocator.cc
mace/core/runtime/opencl/opencl_allocator.cc
+9
-8
mace/core/runtime/opencl/opencl_runtime.cc
mace/core/runtime/opencl/opencl_runtime.cc
+133
-4
mace/core/runtime/opencl/opencl_runtime.h
mace/core/runtime/opencl/opencl_runtime.h
+7
-0
mace/kernels/opencl/bias_add_opencl.cc
mace/kernels/opencl/bias_add_opencl.cc
+1
-1
mace/kernels/opencl/buffer_to_image.cc
mace/kernels/opencl/buffer_to_image.cc
+1
-1
mace/kernels/opencl/cl/common.h
mace/kernels/opencl/cl/common.h
+0
-1
mace/kernels/opencl/fully_connected_opencl.cc
mace/kernels/opencl/fully_connected_opencl.cc
+1
-1
mace/kernels/opencl/helper.cc
mace/kernels/opencl/helper.cc
+6
-6
未找到文件。
mace/core/runtime/opencl/opencl_allocator.cc
浏览文件 @
7efde524
...
...
@@ -40,7 +40,7 @@ void *OpenCLAllocator::New(size_t nbytes) const {
cl
::
Buffer
*
buffer
=
new
cl
::
Buffer
(
OpenCLRuntime
::
Global
()
->
context
(),
CL_MEM_READ_WRITE
|
CL_MEM_ALLOC_HOST_PTR
,
nbytes
,
nullptr
,
&
error
);
MACE_CHECK
(
error
==
CL_SUCCESS
)
<<
"error code: "
<<
error
;
MACE_CHECK
_CL_SUCCESS
(
error
)
;
return
static_cast
<
void
*>
(
buffer
);
}
...
...
@@ -57,9 +57,9 @@ void *OpenCLAllocator::NewImage(const std::vector<size_t> &image_shape,
new
cl
::
Image2D
(
OpenCLRuntime
::
Global
()
->
context
(),
CL_MEM_READ_WRITE
|
CL_MEM_ALLOC_HOST_PTR
,
img_format
,
image_shape
[
0
],
image_shape
[
1
],
0
,
nullptr
,
&
error
);
MACE_CHECK
(
error
==
CL_SUCCESS
)
<<
error
<<
" with image shape: ["
<<
image_shape
[
0
]
<<
", "
<<
image_shape
[
1
]
<<
"]"
;
MACE_CHECK
_CL_SUCCESS
(
error
)
<<
" with image shape: ["
<<
image_shape
[
0
]
<<
", "
<<
image_shape
[
1
]
<<
"]"
;
return
cl_image
;
}
...
...
@@ -88,7 +88,7 @@ void *OpenCLAllocator::Map(void *buffer, size_t offset, size_t nbytes) const {
void
*
mapped_ptr
=
queue
.
enqueueMapBuffer
(
*
cl_buffer
,
CL_TRUE
,
CL_MAP_READ
|
CL_MAP_WRITE
,
offset
,
nbytes
,
nullptr
,
nullptr
,
&
error
);
MACE_CHECK
(
error
==
CL_SUCCESS
);
MACE_CHECK
_CL_SUCCESS
(
error
);
return
mapped_ptr
;
}
...
...
@@ -107,7 +107,7 @@ void *OpenCLAllocator::MapImage(void *buffer,
*
cl_image
,
CL_TRUE
,
CL_MAP_READ
|
CL_MAP_WRITE
,
origin
,
region
,
mapped_image_pitch
->
data
(),
mapped_image_pitch
->
data
()
+
1
,
nullptr
,
nullptr
,
&
error
);
MACE_CHECK
(
error
==
CL_SUCCESS
)
<<
error
;
MACE_CHECK
_CL_SUCCESS
(
error
)
;
return
mapped_ptr
;
}
...
...
@@ -115,8 +115,9 @@ void *OpenCLAllocator::MapImage(void *buffer,
void
OpenCLAllocator
::
Unmap
(
void
*
buffer
,
void
*
mapped_ptr
)
const
{
auto
cl_buffer
=
static_cast
<
cl
::
Buffer
*>
(
buffer
);
auto
queue
=
OpenCLRuntime
::
Global
()
->
command_queue
();
MACE_CHECK
(
queue
.
enqueueUnmapMemObject
(
*
cl_buffer
,
mapped_ptr
,
nullptr
,
nullptr
)
==
CL_SUCCESS
);
cl_int
error
=
queue
.
enqueueUnmapMemObject
(
*
cl_buffer
,
mapped_ptr
,
nullptr
,
nullptr
);
MACE_CHECK_CL_SUCCESS
(
error
);
}
bool
OpenCLAllocator
::
OnHost
()
const
{
return
false
;
}
...
...
mace/core/runtime/opencl/opencl_runtime.cc
浏览文件 @
7efde524
...
...
@@ -40,6 +40,135 @@ bool WriteFile(const std::string &filename,
}
// namespace
const
std
::
string
OpenCLErrorToString
(
cl_int
error
)
{
switch
(
error
)
{
case
CL_SUCCESS
:
return
"CL_SUCCESS"
;
case
CL_DEVICE_NOT_FOUND
:
return
"CL_DEVICE_NOT_FOUND"
;
case
CL_DEVICE_NOT_AVAILABLE
:
return
"CL_DEVICE_NOT_AVAILABLE"
;
case
CL_COMPILER_NOT_AVAILABLE
:
return
"CL_COMPILER_NOT_AVAILABLE"
;
case
CL_MEM_OBJECT_ALLOCATION_FAILURE
:
return
"CL_MEM_OBJECT_ALLOCATION_FAILURE"
;
case
CL_OUT_OF_RESOURCES
:
return
"CL_OUT_OF_RESOURCES"
;
case
CL_OUT_OF_HOST_MEMORY
:
return
"CL_OUT_OF_HOST_MEMORY"
;
case
CL_PROFILING_INFO_NOT_AVAILABLE
:
return
"CL_PROFILING_INFO_NOT_AVAILABLE"
;
case
CL_MEM_COPY_OVERLAP
:
return
"CL_MEM_COPY_OVERLAP"
;
case
CL_IMAGE_FORMAT_MISMATCH
:
return
"CL_IMAGE_FORMAT_MISMATCH"
;
case
CL_IMAGE_FORMAT_NOT_SUPPORTED
:
return
"CL_IMAGE_FORMAT_NOT_SUPPORTED"
;
case
CL_BUILD_PROGRAM_FAILURE
:
return
"CL_BUILD_PROGRAM_FAILURE"
;
case
CL_MAP_FAILURE
:
return
"CL_MAP_FAILURE"
;
case
CL_MISALIGNED_SUB_BUFFER_OFFSET
:
return
"CL_MISALIGNED_SUB_BUFFER_OFFSET"
;
case
CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST
:
return
"CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST"
;
case
CL_COMPILE_PROGRAM_FAILURE
:
return
"CL_COMPILE_PROGRAM_FAILURE"
;
case
CL_LINKER_NOT_AVAILABLE
:
return
"CL_LINKER_NOT_AVAILABLE"
;
case
CL_LINK_PROGRAM_FAILURE
:
return
"CL_LINK_PROGRAM_FAILURE"
;
case
CL_DEVICE_PARTITION_FAILED
:
return
"CL_DEVICE_PARTITION_FAILED"
;
case
CL_KERNEL_ARG_INFO_NOT_AVAILABLE
:
return
"CL_KERNEL_ARG_INFO_NOT_AVAILABLE"
;
case
CL_INVALID_VALUE
:
return
"CL_INVALID_VALUE"
;
case
CL_INVALID_DEVICE_TYPE
:
return
"CL_INVALID_DEVICE_TYPE"
;
case
CL_INVALID_PLATFORM
:
return
"CL_INVALID_PLATFORM"
;
case
CL_INVALID_DEVICE
:
return
"CL_INVALID_DEVICE"
;
case
CL_INVALID_CONTEXT
:
return
"CL_INVALID_CONTEXT"
;
case
CL_INVALID_QUEUE_PROPERTIES
:
return
"CL_INVALID_QUEUE_PROPERTIES"
;
case
CL_INVALID_COMMAND_QUEUE
:
return
"CL_INVALID_COMMAND_QUEUE"
;
case
CL_INVALID_HOST_PTR
:
return
"CL_INVALID_HOST_PTR"
;
case
CL_INVALID_MEM_OBJECT
:
return
"CL_INVALID_MEM_OBJECT"
;
case
CL_INVALID_IMAGE_FORMAT_DESCRIPTOR
:
return
"CL_INVALID_IMAGE_FORMAT_DESCRIPTOR"
;
case
CL_INVALID_IMAGE_SIZE
:
return
"CL_INVALID_IMAGE_SIZE"
;
case
CL_INVALID_SAMPLER
:
return
"CL_INVALID_SAMPLER"
;
case
CL_INVALID_BINARY
:
return
"CL_INVALID_BINARY"
;
case
CL_INVALID_BUILD_OPTIONS
:
return
"CL_INVALID_BUILD_OPTIONS"
;
case
CL_INVALID_PROGRAM
:
return
"CL_INVALID_PROGRAM"
;
case
CL_INVALID_PROGRAM_EXECUTABLE
:
return
"CL_INVALID_PROGRAM_EXECUTABLE"
;
case
CL_INVALID_KERNEL_NAME
:
return
"CL_INVALID_KERNEL_NAME"
;
case
CL_INVALID_KERNEL_DEFINITION
:
return
"CL_INVALID_KERNEL_DEFINITION"
;
case
CL_INVALID_KERNEL
:
return
"CL_INVALID_KERNEL"
;
case
CL_INVALID_ARG_INDEX
:
return
"CL_INVALID_ARG_INDEX"
;
case
CL_INVALID_ARG_VALUE
:
return
"CL_INVALID_ARG_VALUE"
;
case
CL_INVALID_ARG_SIZE
:
return
"CL_INVALID_ARG_SIZE"
;
case
CL_INVALID_KERNEL_ARGS
:
return
"CL_INVALID_KERNEL_ARGS"
;
case
CL_INVALID_WORK_DIMENSION
:
return
"CL_INVALID_WORK_DIMENSION"
;
case
CL_INVALID_WORK_GROUP_SIZE
:
return
"CL_INVALID_WORK_GROUP_SIZE"
;
case
CL_INVALID_WORK_ITEM_SIZE
:
return
"CL_INVALID_WORK_ITEM_SIZE"
;
case
CL_INVALID_GLOBAL_OFFSET
:
return
"CL_INVALID_GLOBAL_OFFSET"
;
case
CL_INVALID_EVENT_WAIT_LIST
:
return
"CL_INVALID_EVENT_WAIT_LIST"
;
case
CL_INVALID_EVENT
:
return
"CL_INVALID_EVENT"
;
case
CL_INVALID_OPERATION
:
return
"CL_INVALID_OPERATION"
;
case
CL_INVALID_GL_OBJECT
:
return
"CL_INVALID_GL_OBJECT"
;
case
CL_INVALID_BUFFER_SIZE
:
return
"CL_INVALID_BUFFER_SIZE"
;
case
CL_INVALID_MIP_LEVEL
:
return
"CL_INVALID_MIP_LEVEL"
;
case
CL_INVALID_GLOBAL_WORK_SIZE
:
return
"CL_INVALID_GLOBAL_WORK_SIZE"
;
case
CL_INVALID_PROPERTY
:
return
"CL_INVALID_PROPERTY"
;
case
CL_INVALID_IMAGE_DESCRIPTOR
:
return
"CL_INVALID_IMAGE_DESCRIPTOR"
;
case
CL_INVALID_COMPILER_OPTIONS
:
return
"CL_INVALID_COMPILER_OPTIONS"
;
case
CL_INVALID_LINKER_OPTIONS
:
return
"CL_INVALID_LINKER_OPTIONS"
;
case
CL_INVALID_DEVICE_PARTITION_COUNT
:
return
"CL_INVALID_DEVICE_PARTITION_COUNT"
;
case
CL_INVALID_PIPE_SIZE
:
return
"CL_INVALID_PIPE_SIZE"
;
case
CL_INVALID_DEVICE_QUEUE
:
return
"CL_INVALID_DEVICE_QUEUE"
;
default:
return
MakeString
(
"UNKNOWN: "
,
error
);
}
}
void
OpenCLProfilingTimer
::
StartTiming
()
{}
void
OpenCLProfilingTimer
::
StopTiming
()
{
...
...
@@ -183,13 +312,13 @@ OpenCLRuntime::OpenCLRuntime(GPUPerfHint gpu_perf_hint,
context_
=
std
::
shared_ptr
<
cl
::
Context
>
(
new
cl
::
Context
({
*
device_
},
nullptr
,
nullptr
,
nullptr
,
&
err
));
}
MACE_CHECK
(
err
==
CL_SUCCESS
)
<<
"error code: "
<<
err
;
MACE_CHECK
_CL_SUCCESS
(
err
)
;
command_queue_
=
std
::
make_shared
<
cl
::
CommandQueue
>
(
*
context_
,
*
device_
,
properties
,
&
err
);
MACE_CHECK
(
err
==
CL_SUCCESS
)
<<
"error code: "
<<
err
;
MACE_CHECK
_CL_SUCCESS
(
err
)
;
const
char
*
kernel_path
=
getenv
(
"MACE_KERNEL_PATH"
);
this
->
kernel_path_
=
...
...
@@ -278,7 +407,7 @@ void OpenCLRuntime::BuildProgram(const std::string &program_name,
cl_int
err
=
clGetProgramInfo
((
*
program
)(),
CL_PROGRAM_BINARY_SIZES
,
sizeof
(
size_t
)
*
device_list_size
,
program_binary_sizes
.
get
(),
nullptr
);
MACE_CHECK
(
err
==
CL_SUCCESS
)
<<
"Error code: "
<<
err
;
MACE_CHECK
_CL_SUCCESS
(
err
)
;
std
::
unique_ptr
<
std
::
unique_ptr
<
unsigned
char
[]
>
[]
>
program_binaries
(
new
std
::
unique_ptr
<
unsigned
char
[]
>
[
device_list_size
]);
for
(
cl_uint
i
=
0
;
i
<
device_list_size
;
++
i
)
{
...
...
@@ -289,7 +418,7 @@ void OpenCLRuntime::BuildProgram(const std::string &program_name,
err
=
clGetProgramInfo
((
*
program
)(),
CL_PROGRAM_BINARIES
,
sizeof
(
unsigned
char
*
)
*
device_list_size
,
program_binaries
.
get
(),
nullptr
);
MACE_CHECK
(
err
==
CL_SUCCESS
)
<<
"Error code: "
<<
err
;
MACE_CHECK
_CL_SUCCESS
(
err
)
;
std
::
vector
<
unsigned
char
>
content
(
reinterpret_cast
<
unsigned
char
const
*>
(
program_binaries
[
0
].
get
()),
reinterpret_cast
<
unsigned
char
const
*>
(
program_binaries
[
0
].
get
())
+
...
...
mace/core/runtime/opencl/opencl_runtime.h
浏览文件 @
7efde524
...
...
@@ -15,6 +15,7 @@
#include "mace/core/runtime/opencl/cl2_header.h"
#include "mace/core/runtime/opencl/opencl_wrapper.h"
#include "mace/public/mace_runtime.h"
#include "mace/utils/string_util.h"
#include "mace/utils/timer.h"
namespace
mace
{
...
...
@@ -26,6 +27,12 @@ enum GPUType {
UNKNOWN
,
};
const
std
::
string
OpenCLErrorToString
(
cl_int
error
);
#define MACE_CHECK_CL_SUCCESS(error) \
MACE_CHECK(error == CL_SUCCESS) << "error: " << OpenCLErrorToString(error)
class
OpenCLProfilingTimer
:
public
Timer
{
public:
explicit
OpenCLProfilingTimer
(
const
cl
::
Event
*
event
)
...
...
mace/kernels/opencl/bias_add_opencl.cc
浏览文件 @
7efde524
...
...
@@ -76,7 +76,7 @@ void BiasAddFunctor<DeviceType::OPENCL, T>::operator()(const Tensor *input,
cl
::
NDRange
(
roundup_gws
[
0
],
roundup_gws
[
1
],
roundup_gws
[
2
]),
cl
::
NDRange
(
lws
[
0
],
lws
[
1
],
lws
[
2
]),
nullptr
,
&
event
);
}
MACE_CHECK
(
error
==
CL_SUCCESS
);
MACE_CHECK
_CL_SUCCESS
(
error
);
if
(
future
!=
nullptr
)
{
future
->
wait_fn
=
[
runtime
,
event
](
CallStats
*
stats
)
{
event
.
wait
();
...
...
mace/kernels/opencl/buffer_to_image.cc
浏览文件 @
7efde524
...
...
@@ -134,7 +134,7 @@ void BufferToImageFunctor<DeviceType::OPENCL, T>::operator()(
b2f_kernel
,
cl
::
NullRange
,
cl
::
NDRange
(
roundup_gws
[
0
],
roundup_gws
[
1
]),
cl
::
NDRange
(
lws
[
0
],
lws
[
1
]),
nullptr
,
&
event
);
}
MACE_CHECK
(
error
==
CL_SUCCESS
)
<<
"Error code: "
<<
error
;
MACE_CHECK
_CL_SUCCESS
(
error
)
;
if
(
future
!=
nullptr
)
{
future
->
wait_fn
=
[
runtime
,
event
](
CallStats
*
stats
)
{
event
.
wait
();
...
...
mace/kernels/opencl/cl/common.h
浏览文件 @
7efde524
...
...
@@ -6,7 +6,6 @@
#define MACE_KERNELS_OPENCL_CL_COMMON_H_
#pragma OPENCL EXTENSION cl_khr_fp16 : enable
#pragma OPENCL EXTENSION cl_khr_3d_image_writes : enable
#define VEC_DATA_TYPE_STR(data_type, size) data_type##size
#define VEC_DATA_TYPE(data_type, size) VEC_DATA_TYPE_STR(data_type, size)
...
...
mace/kernels/opencl/fully_connected_opencl.cc
浏览文件 @
7efde524
...
...
@@ -99,7 +99,7 @@ void FCWXKernel(cl::Kernel *kernel,
cl_int
error
=
runtime
->
command_queue
().
enqueueNDRangeKernel
(
*
kernel
,
cl
::
NullRange
,
cl
::
NDRange
((
*
gws
)[
0
],
(
*
gws
)[
1
],
(
*
gws
)[
2
]),
cl
::
NDRange
((
*
lws
)[
0
],
(
*
lws
)[
1
],
(
*
lws
)[
2
]),
nullptr
,
&
event
);
MACE_CHECK
(
error
==
CL_SUCCESS
)
<<
"Error code: "
<<
error
;
MACE_CHECK
_CL_SUCCESS
(
error
)
;
if
(
future
!=
nullptr
)
{
future
->
wait_fn
=
[
runtime
,
event
](
CallStats
*
stats
)
{
...
...
mace/kernels/opencl/helper.cc
浏览文件 @
7efde524
...
...
@@ -262,7 +262,7 @@ void TuningOrRun3DKernel(const cl::Kernel &kernel,
cl
::
NDRange
(
roundup_gws
[
0
],
roundup_gws
[
1
],
roundup_gws2
),
cl
::
NDRange
(
params
[
0
],
params
[
1
],
params
[
2
]),
nullptr
,
&
event
);
}
MACE_CHECK
(
error
==
CL_SUCCESS
)
<<
"Error code: "
<<
error
;
MACE_CHECK
_CL_SUCCESS
(
error
)
;
}
}
else
{
timer
->
ClearTiming
();
...
...
@@ -276,7 +276,7 @@ void TuningOrRun3DKernel(const cl::Kernel &kernel,
cl
::
NDRange
(
roundup_gws
[
0
],
roundup_gws
[
1
],
roundup_gws
[
2
]),
cl
::
NDRange
(
params
[
0
],
params
[
1
],
params
[
2
]),
nullptr
,
&
event
);
}
MACE_CHECK
(
error
==
CL_SUCCESS
)
<<
"Error code: "
<<
error
;
MACE_CHECK
_CL_SUCCESS
(
error
)
;
timer
->
AccumulateTiming
();
tuning_result
->
assign
(
params
.
begin
(),
params
.
end
());
...
...
@@ -303,7 +303,7 @@ void TuningOrRun3DKernel(const cl::Kernel &kernel,
cl
::
NDRange
(
roundup_gws
[
0
],
roundup_gws
[
1
],
roundup_gws2
),
cl
::
NDRange
(
params
[
0
],
params
[
1
],
params
[
2
]),
nullptr
,
&
event
);
}
MACE_CHECK
(
error
==
CL_SUCCESS
)
<<
"Error code: "
<<
error
;
MACE_CHECK
_CL_SUCCESS
(
error
)
;
timer
->
AccumulateTiming
();
}
}
...
...
@@ -379,7 +379,7 @@ void TuningOrRun2DKernel(const cl::Kernel &kernel,
cl
::
NDRange
(
roundup_gws
[
0
],
roundup_gws1
),
cl
::
NDRange
(
params
[
0
],
params
[
1
]),
nullptr
,
&
event
);
}
MACE_CHECK
(
error
==
CL_SUCCESS
)
<<
"Error code: "
<<
error
;
MACE_CHECK
_CL_SUCCESS
(
error
)
;
}
}
else
{
timer
->
ClearTiming
();
...
...
@@ -392,7 +392,7 @@ void TuningOrRun2DKernel(const cl::Kernel &kernel,
kernel
,
cl
::
NullRange
,
cl
::
NDRange
(
roundup_gws
[
0
],
roundup_gws
[
1
]),
cl
::
NDRange
(
params
[
0
],
params
[
1
]),
nullptr
,
&
event
);
}
MACE_CHECK
(
error
==
CL_SUCCESS
)
<<
"Error code: "
<<
error
;
MACE_CHECK
_CL_SUCCESS
(
error
)
;
timer
->
AccumulateTiming
();
tuning_result
->
assign
(
params
.
begin
(),
params
.
end
());
...
...
@@ -419,7 +419,7 @@ void TuningOrRun2DKernel(const cl::Kernel &kernel,
cl
::
NDRange
(
roundup_gws
[
0
],
roundup_gws1
),
cl
::
NDRange
(
params
[
0
],
params
[
1
]),
nullptr
,
&
event
);
}
MACE_CHECK
(
error
==
CL_SUCCESS
)
<<
"Error code: "
<<
error
;
MACE_CHECK
_CL_SUCCESS
(
error
)
;
timer
->
AccumulateTiming
();
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录