I was reading through the specs, and I was wondering how sub-buffers could be used. My first idea was to use them for travelling buffers between devices. Let's say I'd have one massive volume to iterate, simulate or anything like that. The massive volume would reside in host memory, and smaller chunks of this volume would be buffers (one given to each device), and the boundaries (where communication might occur between neighbours) would be sub-buffers. This would facilitate and accelerate communication between devices.
I'm unsure though if clEnqueueCopyBuffer accepts sub-buffer objects. Or can anyone explain if this would be logical or not? Or say another scenario where they are useful?