As we know that clFinish() waits until all previously commands in a command queue have completed and clWaitForEvents() also waits for commands identified by event objects to complete. It means either clFinish() or clWaitForEvents() can be used as a synchronization on host device.
So why we have two different separate functions?
And how clFinish() is different from clWaitForEvents()? Does clFinish() do something more than clWaitForEvents() ?