clCreateBuffer() need lots of time

given a kernel and repeat running it, the corresponding cl_mem object is constant, but values of a array binded with the cl_mem object is changing, how to synchronize data between host and device ? it seems that only rebuilding cl_mem object can do that. if the array is big enough, it will consumes lots of time. So my question is : is there any method to achieve it quickly and efficiently?

Not sure I understand your question. Have you looked at clEnqueueReadBuffer and clEnqueueWriteBuffer? Or clEnqueueMapBuffer?

i have looked at these functions. but strangely the clEnqueueMapBuffer used more time than clEnqueueReadBuffer .