performance difference between clEnqueueWriteBuffer and clEnqueueMapBuffer


I have a buffer object(which is sent as an argument to a kernel), whose data contents are modified for ever invocation of the kernel by the host.

In this case, is it more efficient to transfer data to this memory object using clEnqueueueWriteBuffer(), or instead map the memory object to the host address space using clEnqueueMapBuffer() and then write to this mapped region? Will there be an overhead of mapping and unmapping the buffer object when clEnqueueMapBuffer() is called multiple times, when compared to clEnqueueWriteBuffer(), which would make clEnqueueWriteBuffer() more attractive to use?