I'm not sure I would trust `USE_HOST_PTR` performance-wise. The CL spec allows copy-in/copy-out behavior, so that the kernel can rely on alignment assumptions. The implementation may or may not handle that intelligently.

If you only want one allocation, it's usually best to have the CL implementation perform it. (e.g. by using `COPY_HOST_PTR`) You can then map the buffer back into CPU address space via a [memory map](http://documen.tician.de/pyopencl/runtime.html#pyopencl.enqueue_map_buffer).