On Tue, Dec 30, 2014 at 8:13 PM, John Bytheway
On 2014-12-30 21:46, Gruenke,Matt wrote:
-----Original Message----- From: Boost [mailto:boost-bounces@lists.boost.org] On Behalf Of John Bytheway Sent: Tuesday, December 30, 2014 21:23 To: boost@lists.boost.org Subject: Re: [boost] [compute] Review
On 2014-12-29 02:01, Kyle Lutz wrote:
Currently it will just buffer the entire range into a std::vector<T> and then copy that to the device. If this is a bottleneck it could also be improved to copy the data in smaller batches. Let me know if you encounter issues with this.
Does this also work with copy_async? I presume not, because there would be troubles with the lifetime of the temporary vector...
Async host <-> device copies only exist at the low level (command_queue). They sidestep the issue by using raw pointers and size.
I dispute that. There's a copy_async to which you need not supply a command_queue. It seems high-level to me. http://kylelutz.github.io/compute/boost/compute/copy_async.html
Indeed, the following compiles:
typedef uint64_t T; std::list<T> list = {0, 1, 2}; compute::vector<T> device_vector(list.size()); compute::copy_async(list.begin(), list.end(), device_vector.begin());
but then fails at runtime because copy_async doesn't support non-contiguous iterators. This is bad. The condition inside copy_async is compile-time, so this assert could be a static_assert. I made an issue. https://github.com/kylelutz/compute/issues/401
Thanks for reporting this, I'll get it fixed. -kyle