no just once. under the hood all cl_* objects are just pointer to some struct. you should call clRetain on object if you want copy cl object handler somewhere else. for example when you pass cl_mem into some fucntion and want ensure that object remain valid whole time.