Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
A
Actor Framework
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
cpp-libs
Actor Framework
Commits
699869d9
Commit
699869d9
authored
Jan 15, 2015
by
Joseph Noir
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Cleanup error handling to use opencl_err header
parent
2a44eee1
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
23 additions
and
50 deletions
+23
-50
libcaf_opencl/caf/opencl/actor_facade.hpp
libcaf_opencl/caf/opencl/actor_facade.hpp
+12
-35
libcaf_opencl/caf/opencl/command.hpp
libcaf_opencl/caf/opencl/command.hpp
+5
-7
libcaf_opencl/src/program.cpp
libcaf_opencl/src/program.cpp
+6
-8
No files found.
libcaf_opencl/caf/opencl/actor_facade.hpp
View file @
699869d9
...
...
@@ -40,6 +40,7 @@
#include "caf/opencl/command.hpp"
#include "caf/opencl/program.hpp"
#include "caf/opencl/smart_ptr.hpp"
#include "caf/opencl/opencl_err.hpp"
namespace
caf
{
namespace
opencl
{
...
...
@@ -82,15 +83,9 @@ class actor_facade<Ret(Args...)> : public abstract_actor {
};
check_vec
(
offsets
,
"offsets"
);
check_vec
(
local_dims
,
"local dimensions"
);
cl_int
err
{
0
};
kernel_ptr
kernel
;
kernel
.
adopt
(
clCreateKernel
(
prog
.
m_program
.
get
(),
kernel_name
,
&
err
));
if
(
err
!=
CL_SUCCESS
)
{
std
::
ostringstream
oss
;
oss
<<
"clCreateKernel: "
<<
get_opencl_error
(
err
);
CAF_LOGM_ERROR
(
"caf::opencl::actor_facade"
,
oss
.
str
());
throw
std
::
runtime_error
(
oss
.
str
());
}
kernel
.
adopt
(
v2get
(
CAF_CLF
(
clCreateKernel
),
prog
.
m_program
.
get
(),
kernel_name
));
if
(
result_size
==
0
)
{
result_size
=
std
::
accumulate
(
global_dims
.
begin
(),
global_dims
.
end
(),
size_t
{
1
},
std
::
multiplies
<
size_t
>
{});
...
...
@@ -159,14 +154,11 @@ class actor_facade<Ret(Args...)> : public abstract_actor {
size_t
m_result_size
;
void
add_arguments_to_kernel_rec
(
evnt_vec
&
,
args_vec
&
arguments
)
{
cl_int
err
{
0
};
// rotate left (output buffer to the end)
rotate
(
begin
(
arguments
),
begin
(
arguments
)
+
1
,
end
(
arguments
));
for
(
cl_uint
i
=
0
;
i
<
arguments
.
size
();
++
i
)
{
err
=
clSetKernelArg
(
m_kernel
.
get
(),
i
,
sizeof
(
cl_mem
),
static_cast
<
void
*>
(
&
arguments
[
i
]));
CAF_LOG_ERROR_IF
(
err
!=
CL_SUCCESS
,
"clSetKernelArg: "
<<
get_opencl_error
(
err
));
v1callcl
(
CAF_CLF
(
clSetKernelArg
),
m_kernel
.
get
(),
i
,
sizeof
(
cl_mem
),
static_cast
<
void
*>
(
&
arguments
[
i
]));
}
clFlush
(
m_queue
.
get
());
}
...
...
@@ -174,21 +166,12 @@ class actor_facade<Ret(Args...)> : public abstract_actor {
template
<
typename
T0
,
typename
...
Ts
>
void
add_arguments_to_kernel_rec
(
evnt_vec
&
events
,
args_vec
&
arguments
,
T0
&
arg0
,
Ts
&
...
args
)
{
cl_int
err
{
0
};
size_t
buffer_size
=
sizeof
(
typename
T0
::
value_type
)
*
arg0
.
size
();
auto
buffer
=
clCreateBuffer
(
m_context
.
get
(),
CL_MEM_READ_ONLY
,
buffer_size
,
nullptr
,
&
err
);
if
(
err
!=
CL_SUCCESS
)
{
CAF_LOGMF
(
CAF_ERROR
,
"clCreateBuffer: "
<<
get_opencl_error
(
err
));
return
;
}
cl_event
event
;
err
=
clEnqueueWriteBuffer
(
m_queue
.
get
(),
buffer
,
CL_FALSE
,
0
,
buffer_size
,
arg0
.
data
(),
0
,
nullptr
,
&
event
);
if
(
err
!=
CL_SUCCESS
)
{
CAF_LOGMF
(
CAF_ERROR
,
"clEnqueueWriteBuffer: "
<<
get_opencl_error
(
err
));
return
;
}
auto
buffer
=
v2get
(
CAF_CLF
(
clCreateBuffer
),
m_context
.
get
(),
CL_MEM_READ_ONLY
,
buffer_size
,
nullptr
);
cl_event
event
=
v1get
<
cl_event
>
(
CAF_CLF
(
clEnqueueWriteBuffer
),
m_queue
.
get
(),
buffer
,
CL_FALSE
,
0
,
buffer_size
,
arg0
.
data
());
events
.
push_back
(
std
::
move
(
event
));
mem_ptr
tmp
;
tmp
.
adopt
(
std
::
move
(
buffer
));
...
...
@@ -200,14 +183,8 @@ class actor_facade<Ret(Args...)> : public abstract_actor {
void
add_arguments_to_kernel
(
evnt_vec
&
events
,
args_vec
&
arguments
,
size_t
ret_size
,
Ts
&&
...
args
)
{
arguments
.
clear
();
cl_int
err
{
0
};
auto
buf
=
clCreateBuffer
(
m_context
.
get
(),
CL_MEM_WRITE_ONLY
,
sizeof
(
typename
R
::
value_type
)
*
ret_size
,
nullptr
,
&
err
);
if
(
err
!=
CL_SUCCESS
)
{
CAF_LOGMF
(
CAF_ERROR
,
"clCreateBuffer: "
<<
get_opencl_error
(
err
));
return
;
}
auto
buf
=
v2get
(
CAF_CLF
(
clCreateBuffer
),
m_context
.
get
(),
CL_MEM_WRITE_ONLY
,
sizeof
(
typename
R
::
value_type
)
*
ret_size
,
nullptr
);
mem_ptr
tmp
;
tmp
.
adopt
(
std
::
move
(
buf
));
arguments
.
push_back
(
tmp
);
...
...
libcaf_opencl/caf/opencl/command.hpp
View file @
699869d9
...
...
@@ -30,6 +30,7 @@
#include "caf/abstract_actor.hpp"
#include "caf/response_promise.hpp"
#include "caf/opencl/smart_ptr.hpp"
#include "caf/opencl/opencl_err.hpp"
#include "caf/detail/scope_guard.hpp"
namespace
caf
{
...
...
@@ -52,25 +53,22 @@ class command : public ref_counted {
m_msg
(
msg
)
{}
~
command
()
{
cl_int
err
{
0
};
for
(
auto
&
e
:
m_events
)
{
err
=
clReleaseEvent
(
e
);
if
(
err
!=
CL_SUCCESS
)
{
CAF_LOGMF
(
CAF_ERROR
,
"clReleaseEvent: "
<<
get_opencl_error
(
err
));
}
v1callcl
(
CAF_CLF
(
clReleaseEvent
),
e
);
}
}
void
enqueue
()
{
// Errors in this function can not be handled by opencl_err.hpp
// because they require non-standard error handling
CAF_LOG_TRACE
(
"command::enqueue()"
);
this
->
ref
();
// reference held by the OpenCL comand queue
cl_int
err
{
0
};
cl_event
event_k
;
auto
data_or_nullptr
=
[](
const
dim_vec
&
vec
)
{
return
vec
.
empty
()
?
nullptr
:
vec
.
data
();
};
// OpenCL expects cl_uint (unsigned int), hence the cast
err
=
clEnqueueNDRangeKernel
(
cl_int
err
=
clEnqueueNDRangeKernel
(
m_queue
.
get
(),
m_actor_facade
->
m_kernel
.
get
(),
static_cast
<
cl_uint
>
(
m_actor_facade
->
m_global_dimensions
.
size
()),
data_or_nullptr
(
m_actor_facade
->
m_global_offsets
),
...
...
libcaf_opencl/src/program.cpp
View file @
699869d9
...
...
@@ -23,7 +23,9 @@
#include <iostream>
#include "caf/detail/singletons.hpp"
#include "caf/opencl/program.hpp"
#include "caf/opencl/opencl_err.hpp"
#include "caf/opencl/opencl_metainfo.hpp"
using
namespace
std
;
...
...
@@ -52,20 +54,16 @@ program program::create(const char* kernel_source, const char* options,
throw
runtime_error
(
oss
.
str
());
}
cl_int
err
{
0
};
// create program object from kernel source
size_t
kernel_source_length
=
strlen
(
kernel_source
);
program_ptr
pptr
;
pptr
.
adopt
(
clCreateProgramWithSource
(
context
.
get
(),
1
,
&
kernel_source
,
&
kernel_source_length
,
&
err
));
if
(
err
!=
CL_SUCCESS
)
{
throw
runtime_error
(
"clCreateProgramWithSource: "
+
get_opencl_error
(
err
));
}
pptr
.
adopt
(
v2get
(
CAF_CLF
(
clCreateProgramWithSource
),
context
.
get
(),
1
,
&
kernel_source
,
&
kernel_source_length
));
// build programm from program object
auto
dev_tmp
=
devices
[
device_id
].
m_device
.
get
();
err
=
clBuildProgram
(
pptr
.
get
(),
1
,
&
dev_tmp
,
options
,
nullptr
,
nullptr
);
cl_int
err
=
clBuildProgram
(
pptr
.
get
(),
1
,
&
dev_tmp
,
options
,
nullptr
,
nullptr
);
if
(
err
!=
CL_SUCCESS
)
{
ostringstream
oss
;
oss
<<
"clBuildProgram: "
<<
get_opencl_error
(
err
);
...
...
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