Qual é a diferença entre criar um objeto de buffer com clCreateBuffer + CL_MEM_COPY_HOST_PTR vs. clCreateBuffer + clEnqueueWriteBuffer?

Eu vi as duas versões nos tutoriais, mas não consegui descobrir quais são suas vantagens e desvantagens. Qual é o correto?

cl_mem input = clCreateBuffer(context,CL_MEM_READ_ONLY,sizeof(float) * DATA_SIZE, NULL, NULL);
clEnqueueWriteBuffer(command_queue, input, CL_TRUE, 0, sizeof(float) * DATA_SIZE, inputdata, 0, NULL, NULL);

vs.

cl_mem input = clCreateBuffer(context,CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR, ,sizeof(float) * DATA_SIZE, inputdata, NULL);

Obrigado.

[Atualizar]

Eu adicioneiCL_MEM_COPY_HOST_PTR, para o segundo exemplo para torná-lo correto.

questionAnswers(5)

yourAnswerToTheQuestion