inline HostIterator copy_to_host(svm_ptr<T> first, svm_ptr<T> last, HostIterator result, command_queue &queue) { size_t count = iterator_range_size(first, last); if(count == 0){ return result; } queue.enqueue_svm_memcpy( ::boost::addressof(*result), first.get(), count * sizeof(T) ); return result + count; }
inline svm_ptr<T> copy_on_device(svm_ptr<T> first, svm_ptr<T> last, svm_ptr<T> result, command_queue &queue) { size_t count = iterator_range_size(first, last); if(count == 0){ return result; } queue.enqueue_svm_memcpy( result.get(), first.get(), count * sizeof(T) ); return result + count; }
inline svm_ptr<T> copy_to_device(HostIterator first, HostIterator last, svm_ptr<T> result, command_queue &queue, const wait_list &events) { size_t count = iterator_range_size(first, last); if(count == 0){ return result; } queue.enqueue_svm_memcpy( result.get(), ::boost::addressof(*first), count * sizeof(T), events ); return result + count; }