InputIterator last,
OutputIterator result,
command_queue &queue,
+ const wait_list &events,
typename boost::enable_if<
mpl::and_<
mpl::not_<
"copy_async() is only supported for contiguous host iterators"
);
- return copy_to_device_async(first, last, result, queue);
+ return copy_to_device_async(first, last, result, queue, events);
}
// host -> device (async)
InputIterator last,
OutputIterator result,
command_queue &queue,
+ const wait_list &events,
typename boost::enable_if<
mpl::and_<
mpl::not_<
context
);
return copy_on_device_async(
- mapped_host.begin(), mapped_host.end(), result, queue
+ mapped_host.begin(), mapped_host.end(), result, queue, events
);
}
InputIterator last,
OutputIterator result,
command_queue &queue,
+ const wait_list &events,
typename boost::enable_if<
mpl::and_<
mpl::not_<
>
>::type* = 0)
{
- return copy_to_device(first, last, result, queue);
+ return copy_to_device(first, last, result, queue, events);
}
// host -> device
InputIterator last,
OutputIterator result,
command_queue &queue,
+ const wait_list &events,
typename boost::enable_if<
mpl::and_<
mpl::not_<
// [0; map_copy_threshold) -> copy_to_device_map()
if(input_size_bytes < map_copy_threshold) {
- return copy_to_device_map(first, last, result, queue);
+ return copy_to_device_map(first, last, result, queue, events);
}
// [map_copy_threshold; direct_copy_threshold) -> convert [first; last)
// on host and then perform copy_to_device()
else if(input_size_bytes < direct_copy_threshold) {
std::vector<output_type> vector(first, last);
- return copy_to_device(vector.begin(), vector.end(), result, queue);
+ return copy_to_device(
+ vector.begin(), vector.end(), result, queue, events
+ );
}
// [direct_copy_threshold; inf) -> map [first; last) to device and
// return the result.
// At this point we are sure that count > 1 (first != last), so event
// returned by dispatch_copy_async() must be valid.
- return dispatch_copy_async(first, last, result, queue).get();
+ return dispatch_copy_async(first, last, result, queue, events).get();
}
// host -> device
InputIterator last,
OutputIterator result,
command_queue &queue,
+ const wait_list &events,
typename boost::enable_if<
mpl::and_<
mpl::not_<
// copy_to_device_map() is used for every input
if(input_size_bytes < map_copy_threshold
|| direct_copy_threshold <= map_copy_threshold) {
- return copy_to_device_map(first, last, result, queue);
+ return copy_to_device_map(first, last, result, queue, events);
}
// [map_copy_threshold; inf) -> convert [first; last)
// on host and then perform copy_to_device()
std::vector<output_type> vector(first, last);
- return copy_to_device(vector.begin(), vector.end(), result, queue);
+ return copy_to_device(vector.begin(), vector.end(), result, queue, events);
}
// device -> host (async)
InputIterator last,
OutputIterator result,
command_queue &queue,
+ const wait_list &events,
typename boost::enable_if<
mpl::and_<
is_device_iterator<InputIterator>,
"copy_async() is only supported for contiguous host iterators"
);
- return copy_to_host_async(first, last, result, queue);
+ return copy_to_host_async(first, last, result, queue, events);
}
// device -> host (async)
InputIterator last,
OutputIterator result,
command_queue &queue,
+ const wait_list &events,
typename boost::enable_if<
mpl::and_<
is_device_iterator<InputIterator>,
first,
last,
make_buffer_iterator<output_type>(mapped_host),
- queue
+ queue,
+ events
);
// update host memory asynchronously by maping and unmaping memory
event map_event;
InputIterator last,
OutputIterator result,
command_queue &queue,
+ const wait_list &events,
typename boost::enable_if<
mpl::and_<
is_device_iterator<InputIterator>,
>
>::type* = 0)
{
- return copy_to_host(first, last, result, queue);
+ return copy_to_host(first, last, result, queue, events);
}
// device -> host
InputIterator last,
OutputIterator result,
command_queue &queue,
+ const wait_list &events,
typename boost::enable_if<
mpl::and_<
is_device_iterator<InputIterator>,
// copy_to_host_map() is used for every input
if(input_size_bytes < map_copy_threshold
|| direct_copy_threshold <= map_copy_threshold) {
- return copy_to_host_map(first, last, result, queue);
+ return copy_to_host_map(first, last, result, queue, events);
}
// [map_copy_threshold; inf) -> copy [first;last) to temporary vector
// then copy (and convert) to result using std::copy()
std::vector<input_type> vector(count);
- copy_to_host(first, last, vector.begin(), queue);
+ copy_to_host(first, last, vector.begin(), queue, events);
return std::copy(vector.begin(), vector.end(), result);
}
InputIterator last,
OutputIterator result,
command_queue &queue,
+ const wait_list &events,
typename boost::enable_if<
mpl::and_<
is_device_iterator<InputIterator>,
// [0; map_copy_threshold) -> copy_to_host_map()
if(input_size_bytes < map_copy_threshold) {
- return copy_to_host_map(first, last, result, queue);
+ return copy_to_host_map(first, last, result, queue, events);
}
// [map_copy_threshold; direct_copy_threshold) -> copy [first;last) to
// temporary vector then copy (and convert) to result using std::copy()
else if(input_size_bytes < direct_copy_threshold) {
std::vector<input_type> vector(count);
- copy_to_host(first, last, vector.begin(), queue);
+ copy_to_host(first, last, vector.begin(), queue, events);
return std::copy(vector.begin(), vector.end(), result);
}
// return the result.
// At this point we are sure that count > 1 (first != last), so event
// returned by dispatch_copy_async() must be valid.
- return dispatch_copy_async(first, last, result, queue).get();
+ return dispatch_copy_async(first, last, result, queue, events).get();
}
// device -> device
InputIterator last,
OutputIterator result,
command_queue &queue,
+ const wait_list &events,
typename boost::enable_if<
mpl::and_<
is_device_iterator<InputIterator>,
>
>::type* = 0)
{
- return copy_on_device(first, last, result, queue);
+ return copy_on_device(first, last, result, queue, events);
}
// device -> device (specialization for buffer iterators)
InputIterator last,
OutputIterator result,
command_queue &queue,
+ const wait_list &events,
typename boost::enable_if<
mpl::and_<
is_device_iterator<InputIterator>,
result.get_buffer(),
first.get_index() * sizeof(value_type),
result.get_index() * sizeof(value_type),
- static_cast<size_t>(n) * sizeof(value_type));
+ static_cast<size_t>(n) * sizeof(value_type),
+ events);
return result + n;
}
InputIterator last,
OutputIterator result,
command_queue &queue,
+ const wait_list &events,
typename boost::enable_if<
mpl::and_<
is_device_iterator<InputIterator>,
>
>::type* = 0)
{
- return copy_on_device_async(first, last, result, queue);
+ return copy_on_device_async(first, last, result, queue, events);
}
// device -> device (async, specialization for buffer iterators)
InputIterator last,
OutputIterator result,
command_queue &queue,
+ const wait_list &events,
typename boost::enable_if<
mpl::and_<
is_device_iterator<InputIterator>,
result.get_buffer(),
first.get_index() * sizeof(value_type),
result.get_index() * sizeof(value_type),
- static_cast<size_t>(n) * sizeof(value_type)
+ static_cast<size_t>(n) * sizeof(value_type),
+ events
);
return make_future(result + n, event_);
InputIterator last,
OutputIterator result,
command_queue &queue,
+ const wait_list &events,
typename boost::enable_if_c<
!is_device_iterator<InputIterator>::value &&
!is_device_iterator<OutputIterator>::value
>::type* = 0)
{
(void) queue;
+ (void) events;
return std::copy(first, last, result);
}
inline OutputIterator copy(InputIterator first,
InputIterator last,
OutputIterator result,
- command_queue &queue = system::default_queue())
+ command_queue &queue = system::default_queue(),
+ const wait_list &events = wait_list())
{
- return detail::dispatch_copy(first, last, result, queue);
+ return detail::dispatch_copy(first, last, result, queue, events);
}
/// Copies the values in the range [\p first, \p last) to the range
copy_async(InputIterator first,
InputIterator last,
OutputIterator result,
- command_queue &queue = system::default_queue())
+ command_queue &queue = system::default_queue(),
+ const wait_list &events = wait_list())
{
- return detail::dispatch_copy_async(first, last, result, queue);
+ return detail::dispatch_copy_async(first, last, result, queue, events);
}
} // end compute namespace