Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- std::function<void (event &)>
- kernel_op(cl_command_queue q, cl_kernel kern,
- const std::vector<size_t> &grid_offset,
- const std::vector<size_t> &grid_size,
- const std::vector<size_t> &block_size) {
- const std::vector<size_t> reduced_grid_size = map(
- std::divides<size_t>(), grid_size.begin(), grid_size.end(),
- block_size.begin());
- return [=](event &) {
- kern->launch(*q, grid_offset, reduced_grid_size, block_size);
- };
- }
- -----------------------------
- hard_event *hev = new hard_event(
- *q, CL_COMMAND_NDRANGE_KERNEL, { deps, deps + num_deps },
- kernel_op(q, kern, grid_offset, grid_size, block_size));
- ------------------------------------
- hard_event::hard_event(clover::command_queue &q, cl_command_type command,
- std::vector<clover::event *> deps, action action) :
- _cl_event(q.ctx, deps, action, [](event &ev){}),
- __queue(q), __command(command), __fence(NULL) {
- q.sequence(this);
- trigger();
- }
- -------------------------------------------
- _cl_event::_cl_event(clover::context &ctx,
- std::vector<clover::event *> deps,
- action action_ok, action action_fail) :
- ctx(ctx), __status(0), wait_count(1),
- action_ok(action_ok), action_fail(action_fail) {
- for (auto ev : deps)
- ev->chain(this);
- }
- -------------------------------------------------
- void
- _cl_event::trigger() {
- if (!--wait_count) {
- action_ok(*this);
- while (!__chain.empty()) {
- __chain.back()->trigger();
- __chain.pop_back();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement