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 { ...@@ -97,7 +97,7 @@ class command_impl : public command {
/* enqueue kernel */ /* enqueue kernel */
err = clEnqueueNDRangeKernel(m_queue.get(), err = clEnqueueNDRangeKernel(m_queue.get(),
m_kernel.get(), m_kernel.get(),
3, m_global_dimensions.size(),
NULL, NULL,
m_global_dimensions.data(), m_global_dimensions.data(),
m_local_dimensions.data(), m_local_dimensions.data(),
......
...@@ -83,24 +83,19 @@ class command_dispatcher { ...@@ -83,24 +83,19 @@ class command_dispatcher {
void enqueue(); void enqueue();
template<typename Ret, typename... Args> template<typename Ret, typename... Args>
actor_ptr spawn__(const program& prog, actor_ptr spawn(const program& prog,
const char* kernel_name, const char* kernel_name,
size_t global_dim_1, std::vector<size_t> global_dims,
size_t global_dim_2, std::vector<size_t> local_dims,
size_t global_dim_3, std::function<option<cow_tuple<typename util::rm_ref<Args>::type...>>(any_tuple)> map_args,
size_t local_dim_1, std::function<any_tuple(Ret&)> map_result)
size_t local_dim_2,
size_t local_dim_3,
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); auto i = std::find(local_dims.begin(), local_dims.end(), 0);
if (i != local_dims.end()) local_dims.clear(); if (i != local_dims.end()) local_dims.clear();
return new actor_facade<Ret (Args...)>(this, return new actor_facade<Ret (Args...)>(this,
prog, prog,
kernel_name, kernel_name,
{global_dim_1, global_dim_2, global_dim_3}, global_dims,
local_dims, local_dims,
map_args, map_args,
map_result); map_result);
...@@ -109,12 +104,8 @@ class command_dispatcher { ...@@ -109,12 +104,8 @@ class command_dispatcher {
template<typename Ret, typename... Args> template<typename Ret, typename... Args>
actor_ptr spawn(const program& prog, actor_ptr spawn(const program& prog,
const char* kernel_name, const char* kernel_name,
size_t global_dim_1, std::vector<size_t> global_dims = {1,1,1},
size_t global_dim_2 = 1, std::vector<size_t> local_dims = {0,0,0})
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::function<option<cow_tuple<typename util::rm_ref<Args>::type...>>(any_tuple)> f0 = [] (any_tuple msg) { 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); return tuple_cast<typename util::rm_ref<Args>::type...>(msg);
...@@ -122,80 +113,13 @@ class command_dispatcher { ...@@ -122,80 +113,13 @@ class command_dispatcher {
std::function<any_tuple(Ret&)> f1 = [] (Ret& result) { std::function<any_tuple(Ret&)> f1 = [] (Ret& result) {
return make_any_tuple(std::move(result)); return make_any_tuple(std::move(result));
}; };
return this->spawn__<Ret,Args...>(prog, return this->spawn<Ret,Args...>(prog,
kernel_name, kernel_name,
global_dim_1, global_dims,
global_dim_2, local_dims,
global_dim_3, std::move(f0),
local_dim_1, std::move(f1));
local_dim_2,
local_dim_3,
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: 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