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
21dd89ba
Commit
21dd89ba
authored
Apr 16, 2013
by
Dominik Charousset
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
maintenance
removed unnecessary moves and enforced coding conventions
parent
a828a3c7
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
50 additions
and
87 deletions
+50
-87
libcaf_opencl/cppa/opencl/actor_facade.hpp
libcaf_opencl/cppa/opencl/actor_facade.hpp
+25
-55
libcaf_opencl/cppa/opencl/command.hpp
libcaf_opencl/cppa/opencl/command.hpp
+19
-26
libcaf_opencl/cppa/opencl/command_dispatcher.hpp
libcaf_opencl/cppa/opencl/command_dispatcher.hpp
+6
-6
No files found.
libcaf_opencl/cppa/opencl/actor_facade.hpp
View file @
21dd89ba
...
...
@@ -112,9 +112,9 @@ class actor_facade<Ret(Args...)> : public actor {
return
new
actor_facade
<
Ret
(
Args
...)
>
{
dispatcher
,
kernel
,
prog
,
std
::
move
(
global_dims
)
,
std
::
move
(
offsets
)
,
std
::
move
(
local_dims
)
,
global_dims
,
offsets
,
local_dims
,
std
::
move
(
map_args
),
std
::
move
(
map_result
)};
}
...
...
@@ -160,18 +160,15 @@ class actor_facade<Ret(Args...)> : public actor {
auto
opt
=
m_map_args
(
msg
);
if
(
opt
)
{
response_handle
handle
{
this
,
sender
,
id
.
response_id
()};
size_t
number_of_values
{
1
};
std
::
for_each
(
m_global_dimensions
.
begin
(),
Ret
result_buf
(
std
::
accumulate
(
m_global_dimensions
.
begin
(),
m_global_dimensions
.
end
(),
[
&
](
const
size_t
&
s
)
{
number_of_values
*=
s
;
});
Ret
result_buf
(
number_of_values
);
1
,
std
::
multiplies
<
size_t
>
{}));
std
::
vector
<
mem_ptr
>
arguments
;
add_arguments_to_kernel
(
arguments
,
m_context
.
get
(),
m_kernel
.
get
(),
result_buf
,
get_ref
<
Is
>
(
*
opt
)...);
CPPA_LOG_TRACE
(
"enqueue to dispatcher"
);
enqueue_to_dispatcher
(
m_dispatcher
,
make_counted
<
command_impl
<
Ret
>>
(
handle
,
m_kernel
,
...
...
@@ -181,9 +178,7 @@ class actor_facade<Ret(Args...)> : public actor {
m_local_dimensions
,
m_map_result
));
}
else
{
CPPA_LOG_ERROR
(
"actor_facade::enqueue() tuple_cast failed."
);
}
else
{
CPPA_LOG_ERROR
(
"actor_facade::enqueue() tuple_cast failed."
);
}
}
typedef
std
::
vector
<
mem_ptr
>
args_vec
;
...
...
@@ -202,32 +197,20 @@ class actor_facade<Ret(Args...)> : public actor {
cl_context
,
cl_kernel
kernel
)
{
cl_int
err
{
0
};
for
(
unsigned
long
i
{
1
}
;
i
<
arguments
.
size
();
++
i
)
{
for
(
size_t
i
=
1
;
i
<
arguments
.
size
();
++
i
)
{
err
=
clSetKernelArg
(
kernel
,
(
i
-
1
),
sizeof
(
cl_mem
),
static_cast
<
void
*>
(
&
arguments
[
i
]));
if
(
err
!=
CL_SUCCESS
)
{
std
::
ostringstream
oss
;
oss
<<
"clSetKernelArg: '"
<<
get_opencl_error
(
err
)
<<
"'."
;
CPPA_LOG_ERROR
(
oss
.
str
());
return
;
}
CPPA_LOG_ERROR_IF
(
err
!=
CL_SUCCESS
,
"clSetKernelArg: "
<<
get_opencl_error
(
err
));
}
err
=
clSetKernelArg
(
kernel
,
arguments
.
size
()
-
1
,
sizeof
(
cl_mem
),
static_cast
<
void
*>
(
&
arguments
[
0
]));
if
(
err
!=
CL_SUCCESS
)
{
std
::
ostringstream
oss
;
oss
<<
"clSetKernelArg: '"
<<
get_opencl_error
(
err
)
<<
"'."
;
CPPA_LOG_ERROR
(
oss
.
str
());
return
;
}
CPPA_LOG_ERROR_IF
(
err
!=
CL_SUCCESS
,
"clSetKernelArg: "
<<
get_opencl_error
(
err
));
}
template
<
typename
T0
,
typename
...
Ts
>
...
...
@@ -239,25 +222,17 @@ class actor_facade<Ret(Args...)> : public actor {
cl_int
err
{
0
};
auto
buf
=
clCreateBuffer
(
context
,
CL_MEM_READ_ONLY
|
CL_MEM_COPY_HOST_PTR
,
sizeof
(
typename
T0
::
value_type
)
*
arg0
.
size
(),
sizeof
(
typename
T0
::
value_type
)
*
arg0
.
size
(),
arg0
.
data
(),
&
err
);
if
(
err
!=
CL_SUCCESS
)
{
std
::
ostringstream
oss
;
oss
<<
"clCreateBuffer: '"
<<
get_opencl_error
(
err
)
<<
"'."
;
CPPA_LOG_ERROR
(
oss
.
str
());
return
;
CPPA_LOG_ERROR
(
"clCreateBuffer: "
<<
get_opencl_error
(
err
));
}
else
{
mem_ptr
tmp
;
tmp
.
adopt
(
std
::
move
(
buf
));
arguments
.
push_back
(
tmp
);
return
add_arguments_to_kernel_rec
(
arguments
,
context
,
kernel
,
args
...);
add_arguments_to_kernel_rec
(
arguments
,
context
,
kernel
,
args
...);
}
}
...
...
@@ -271,22 +246,17 @@ class actor_facade<Ret(Args...)> : public actor {
cl_int
err
{
0
};
auto
buf
=
clCreateBuffer
(
context
,
CL_MEM_WRITE_ONLY
,
sizeof
(
typename
R
::
value_type
)
*
ret
.
size
(),
sizeof
(
typename
R
::
value_type
)
*
ret
.
size
(),
nullptr
,
&
err
);
if
(
err
!=
CL_SUCCESS
)
{
std
::
ostringstream
oss
;
oss
<<
"clCreateBuffer: '"
<<
get_opencl_error
(
err
)
<<
"'."
;
CPPA_LOG_ERROR
(
oss
.
str
());
return
;
CPPA_LOG_ERROR
(
"clCreateBuffer: "
<<
get_opencl_error
(
err
));
}
else
{
mem_ptr
tmp
;
tmp
.
adopt
(
std
::
move
(
buf
));
arguments
.
push_back
(
tmp
);
return
add_arguments_to_kernel_rec
(
arguments
,
add_arguments_to_kernel_rec
(
arguments
,
context
,
kernel
,
std
::
forward
<
Ts
>
(
args
)...);
...
...
libcaf_opencl/cppa/opencl/command.hpp
View file @
21dd89ba
...
...
@@ -33,6 +33,7 @@
#define CPPA_OPENCL_COMMAND_HPP
#include <vector>
#include <numeric>
#include <algorithm>
#include <functional>
...
...
@@ -70,21 +71,21 @@ class command_impl : public command {
command_impl
(
response_handle
handle
,
kernel_ptr
kernel
,
std
::
vector
<
mem_ptr
>
arguments
,
const
dim_vec
&
global_dim
ension
s
,
const
dim_vec
&
global_
offsets
,
const
dim_vec
&
local_dim
ension
s
,
const
dim_vec
&
global_dims
,
const
dim_vec
&
offsets
,
const
dim_vec
&
local_dims
,
const
std
::
function
<
any_tuple
(
T
&
)
>&
map_result
)
:
m_number_of_values
(
1
)
:
m_number_of_values
(
std
::
accumulate
(
global_dims
.
begin
(),
global_dims
.
end
(),
1
,
std
::
multiplies
<
size_t
>
{}))
,
m_handle
(
handle
)
,
m_kernel
(
kernel
)
,
m_arguments
(
arguments
)
,
m_global_dim
ensions
(
global_dimension
s
)
,
m_
global_offsets
(
global_
offsets
)
,
m_local_dim
ensions
(
local_dimension
s
)
,
m_global_dim
s
(
global_dim
s
)
,
m_
offsets
(
offsets
)
,
m_local_dim
s
(
local_dim
s
)
,
m_map_result
(
map_result
)
{
m_kernel_event
.
adopt
(
cl_event
());
for
(
auto
s
:
m_global_dimensions
)
m_number_of_values
*=
s
;
}
void
enqueue
(
command_queue_ptr
queue
)
{
...
...
@@ -92,9 +93,7 @@ class command_impl : public command {
this
->
ref
();
cl_int
err
{
0
};
m_queue
=
queue
;
auto
ptr
=
m_kernel_event
.
get
();
auto
data_or_nullptr
=
[](
const
dim_vec
&
vec
)
{
return
vec
.
empty
()
?
nullptr
:
vec
.
data
();
};
...
...
@@ -102,10 +101,10 @@ class command_impl : public command {
/* enqueue kernel */
err
=
clEnqueueNDRangeKernel
(
m_queue
.
get
(),
m_kernel
.
get
(),
m_global_dim
ension
s
.
size
(),
data_or_nullptr
(
m_
global_
offsets
),
data_or_nullptr
(
m_global_dim
ension
s
),
data_or_nullptr
(
m_local_dim
ension
s
),
m_global_dims
.
size
(),
data_or_nullptr
(
m_offsets
),
data_or_nullptr
(
m_global_dims
),
data_or_nullptr
(
m_local_dims
),
0
,
nullptr
,
&
ptr
);
...
...
@@ -116,9 +115,6 @@ class command_impl : public command {
err
=
clSetEventCallback
(
ptr
,
CL_COMPLETE
,
[](
cl_event
,
cl_int
,
void
*
data
)
{
CPPA_LOGC_TRACE
(
"command_impl"
,
"enqueue"
,
"command::enqueue()::callback()"
);
auto
cmd
=
reinterpret_cast
<
command_impl
*>
(
data
);
cmd
->
handle_results
();
cmd
->
deref
();
...
...
@@ -138,14 +134,12 @@ class command_impl : public command {
event_ptr
m_kernel_event
;
command_queue_ptr
m_queue
;
std
::
vector
<
mem_ptr
>
m_arguments
;
dim_vec
m_global_dim
ension
s
;
dim_vec
m_
global_
offsets
;
dim_vec
m_local_dim
ension
s
;
dim_vec
m_global_dims
;
dim_vec
m_offsets
;
dim_vec
m_local_dims
;
std
::
function
<
any_tuple
(
T
&
)
>
m_map_result
;
void
handle_results
()
{
CPPA_LOG_TRACE
(
"command::handle_results()"
);
/* get results from gpu */
cl_int
err
{
0
};
cl_event
read_event
;
T
result
(
m_number_of_values
);
...
...
@@ -160,9 +154,8 @@ class command_impl : public command {
&
read_event
);
clReleaseEvent
(
read_event
);
if
(
err
!=
CL_SUCCESS
)
{
throw
std
::
runtime_error
(
"[!!!] clEnqueueReadBuffer: '"
+
get_opencl_error
(
err
)
+
"'."
);
throw
std
::
runtime_error
(
"clEnqueueReadBuffer: "
+
get_opencl_error
(
err
));
}
auto
mapped_result
=
m_map_result
(
result
);
reply_tuple_to
(
m_handle
,
mapped_result
);
...
...
libcaf_opencl/cppa/opencl/command_dispatcher.hpp
View file @
21dd89ba
...
...
@@ -87,7 +87,7 @@ class command_dispatcher {
actor_ptr
spawn
(
const
program
&
prog
,
const
char
*
kernel_name
,
const
dim_vec
&
global_dims
,
const
dim_vec
&
global_off
s
,
const
dim_vec
&
offset
s
,
const
dim_vec
&
local_dims
,
std
::
function
<
option
<
cow_tuple
<
typename
util
::
rm_ref
<
Args
>::
type
...
>>
(
any_tuple
)
>
map_args
,
std
::
function
<
any_tuple
(
Ret
&
)
>
map_result
)
...
...
@@ -96,7 +96,7 @@ class command_dispatcher {
prog
,
kernel_name
,
global_dims
,
global_off
s
,
offset
s
,
local_dims
,
std
::
move
(
map_args
),
std
::
move
(
map_result
));
...
...
@@ -106,7 +106,7 @@ class command_dispatcher {
actor_ptr
spawn
(
const
program
&
prog
,
const
char
*
kernel_name
,
const
dim_vec
&
global_dims
,
const
dim_vec
&
global_off
s
=
{},
const
dim_vec
&
offset
s
=
{},
const
dim_vec
&
local_dims
=
{})
{
std
::
function
<
option
<
cow_tuple
<
typename
util
::
rm_ref
<
Args
>::
type
...
>>
(
any_tuple
)
>
...
...
@@ -118,9 +118,9 @@ class command_dispatcher {
};
return
this
->
spawn
<
Ret
,
Args
...
>
(
prog
,
kernel_name
,
std
::
move
(
global_dims
)
,
std
::
move
(
global_offs
)
,
std
::
move
(
local_dims
)
,
global_dims
,
offsets
,
local_dims
,
std
::
move
(
map_args
),
std
::
move
(
map_result
));
}
...
...
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