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
d6ddf1ff
Commit
d6ddf1ff
authored
Jan 31, 2014
by
Joseph Noir
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
changed cl_event handling in command
preparation for asynchronous copy operations to device
parent
9ce2a1cf
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
21 additions
and
5 deletions
+21
-5
libcaf_opencl/cppa/opencl/actor_facade.hpp
libcaf_opencl/cppa/opencl/actor_facade.hpp
+2
-0
libcaf_opencl/cppa/opencl/command.hpp
libcaf_opencl/cppa/opencl/command.hpp
+19
-5
No files found.
libcaf_opencl/cppa/opencl/actor_facade.hpp
View file @
d6ddf1ff
...
...
@@ -163,12 +163,14 @@ class actor_facade<Ret(Args...)> : public actor {
if
(
opt
)
{
response_handle
handle
{
this
,
sender
,
id
.
response_id
()};
std
::
vector
<
mem_ptr
>
arguments
;
std
::
vector
<
cl_event
>
events
;
add_arguments_to_kernel
<
Ret
>
(
arguments
,
m_result_size
,
get_ref
<
Is
>
(
*
opt
)...);
auto
cmd
=
make_counted
<
command
<
actor_facade
,
Ret
>>
(
handle
,
this
,
std
::
move
(
arguments
),
std
::
move
(
events
),
m_result_size
);
cmd
->
enqueue
();
}
...
...
libcaf_opencl/cppa/opencl/command.hpp
View file @
d6ddf1ff
...
...
@@ -54,19 +54,32 @@ class command : public ref_counted {
command
(
response_handle
handle
,
intrusive_ptr
<
T
>
actor_facade
,
std
::
vector
<
mem_ptr
>
arguments
,
std
::
vector
<
cl_event
>
events
,
size_t
result_size
)
:
m_result_size
(
result_size
)
,
m_handle
(
handle
)
,
m_actor_facade
(
actor_facade
)
,
m_queue
(
actor_facade
->
m_queue
)
,
m_arguments
(
move
(
arguments
))
,
m_arguments
(
std
::
move
(
arguments
))
,
m_events
(
std
::
move
(
events
))
,
m_result
(
m_result_size
)
{
}
~
command
()
{
cl_int
err
{
0
};
for
(
auto
&
e
:
m_events
)
{
err
=
clReleaseEvent
(
e
);
if
(
err
!=
CL_SUCCESS
)
{
CPPA_LOGMF
(
CPPA_ERROR
,
self
,
"clReleaseEvent: "
<<
get_opencl_error
(
err
));
}
}
}
void
enqueue
()
{
CPPA_LOG_TRACE
(
"command::enqueue()"
);
this
->
ref
();
// reference held by the OpenCL comand queue
cl_int
err
{
0
};
auto
event_k
=
m_kernel_event
.
get
()
;
cl_event
event_k
;
auto
data_or_nullptr
=
[](
const
dim_vec
&
vec
)
{
return
vec
.
empty
()
?
nullptr
:
vec
.
data
();
};
...
...
@@ -80,13 +93,14 @@ class command : public ref_counted {
0
,
nullptr
,
&
event_k
);
m_events
.
push_back
(
event_k
);
if
(
err
!=
CL_SUCCESS
)
{
CPPA_LOGMF
(
CPPA_ERROR
,
self
,
"clEnqueueNDRangeKernel: "
<<
get_opencl_error
(
err
));
this
->
deref
();
// or can anything actually happen?
}
else
{
auto
event_r
=
m_read_event
.
get
()
;
cl_event
event_r
;
err
=
clEnqueueReadBuffer
(
m_queue
.
get
(),
m_arguments
.
back
().
get
(),
CL_FALSE
,
...
...
@@ -96,6 +110,7 @@ class command : public ref_counted {
1
,
&
event_k
,
&
event_r
);
m_events
.
push_back
(
event_r
);
if
(
err
!=
CL_SUCCESS
)
{
throw
std
::
runtime_error
(
"clEnqueueReadBuffer: "
+
get_opencl_error
(
err
));
...
...
@@ -127,10 +142,9 @@ class command : public ref_counted {
int
m_result_size
;
response_handle
m_handle
;
intrusive_ptr
<
T
>
m_actor_facade
;
event_ptr
m_kernel_event
;
event_ptr
m_read_event
;
command_queue_ptr
m_queue
;
std
::
vector
<
mem_ptr
>
m_arguments
;
std
::
vector
<
cl_event
>
m_events
;
R
m_result
;
void
handle_results
()
{
...
...
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