Commit b5257b81 authored by Joseph Noir's avatar Joseph Noir

spawn signature changed

global and local dimension must now be passed as a vector
parent a6759d89
......@@ -97,7 +97,7 @@ class command_impl : public command {
/* enqueue kernel */
err = clEnqueueNDRangeKernel(m_queue.get(),
m_kernel.get(),
3,
m_global_dimensions.size(),
NULL,
m_global_dimensions.data(),
m_local_dimensions.data(),
......
......@@ -83,24 +83,19 @@ class command_dispatcher {
void enqueue();
template<typename Ret, typename... Args>
actor_ptr spawn__(const program& prog,
actor_ptr spawn(const program& prog,
const char* kernel_name,
size_t global_dim_1,
size_t global_dim_2,
size_t global_dim_3,
size_t local_dim_1,
size_t local_dim_2,
size_t local_dim_3,
std::vector<size_t> global_dims,
std::vector<size_t> local_dims,
std::function<option<cow_tuple<typename util::rm_ref<Args>::type...>>(any_tuple)> map_args,
std::function<any_tuple(Ret&)> map_result)
{
std::vector<size_t> local_dims{local_dim_1, local_dim_2, local_dim_3};
auto i = std::find(local_dims.begin(), local_dims.end(), 0);
if (i != local_dims.end()) local_dims.clear();
return new actor_facade<Ret (Args...)>(this,
prog,
kernel_name,
{global_dim_1, global_dim_2, global_dim_3},
global_dims,
local_dims,
map_args,
map_result);
......@@ -109,12 +104,8 @@ class command_dispatcher {
template<typename Ret, typename... Args>
actor_ptr spawn(const program& prog,
const char* kernel_name,
size_t global_dim_1,
size_t global_dim_2 = 1,
size_t global_dim_3 = 1,
size_t local_dim_1 = 0,
size_t local_dim_2 = 0,
size_t local_dim_3 = 0)
std::vector<size_t> global_dims = {1,1,1},
std::vector<size_t> local_dims = {0,0,0})
{
std::function<option<cow_tuple<typename util::rm_ref<Args>::type...>>(any_tuple)> f0 = [] (any_tuple msg) {
return tuple_cast<typename util::rm_ref<Args>::type...>(msg);
......@@ -122,80 +113,13 @@ class command_dispatcher {
std::function<any_tuple(Ret&)> f1 = [] (Ret& result) {
return make_any_tuple(std::move(result));
};
return this->spawn__<Ret,Args...>(prog,
return this->spawn<Ret,Args...>(prog,
kernel_name,
global_dim_1,
global_dim_2,
global_dim_3,
local_dim_1,
local_dim_2,
local_dim_3,
global_dims,
local_dims,
std::move(f0),
std::move(f1));
}
/*
template<typename Ret, typename... Args>
actor_ptr spawn(const program& prog,
const char* kernel_name,
size_t global_dim_1,
size_t global_dim_2 = 1,
size_t global_dim_3 = 1,
size_t local_dim_1 = 0,
size_t local_dim_2 = 0,
size_t local_dim_3 = 0) {
std::vector<size_t> global_dims {global_dim_1,
global_dim_2,
global_dim_3};
std::vector<size_t> local_dims {local_dim_1,
local_dim_2,
local_dim_3};
auto f_remove_invalid = [] (size_t s) { return s <= 0; };
// auto global_invalid = std::remove_if(global_dims.begin(),
// global_dims.end(),
// f_remove_invalid);
// global_dims.erase(global_invalid, global_dims.end());
auto local_invalid = std::remove_if(local_dims.begin(),
local_dims.end(),
f_remove_invalid);
local_dims.erase(local_invalid, local_dims.end());
return new actor_facade<Ret (Args...)>(this,
prog,
kernel_name,
global_dims,
local_dims);
}
template<typename Ret, typename... Args>
actor_ptr spawn(const char* kernel_source,
const char* kernel_name,
size_t global_dim_1,
size_t global_dim_2 = 1,
size_t global_dim_3 = 1,
size_t local_dim_1 = 0,
size_t local_dim_2 = 0,
size_t local_dim_3 = 0) {
return spawn<Ret, Args...>(program::create(kernel_source),
kernel_name,
global_dim_1,
global_dim_2,
global_dim_3,
local_dim_1,
local_dim_2,
local_dim_3);
}
template<typename Ret, typename... Args>
actor_ptr spawn(const program& prog,
const char* kernel_name) {
return new actor_facade<Ret (Args...)>(this, prog, kernel_name);
}
template<typename Ret, typename... Args>
actor_ptr spawn(const char* kernel_source,
const char* kernel_name) {
return spawn<Ret, Args...>(program::create(kernel_source), kernel_name);
}
*/
private:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment