Is a good idea to have multiple command queues by each context or can I just play with multiple events to perform async operations?
Can an unique card process more than two queues at the same time? And... two clEnqueueNDRangeKernel functions at the same time?
It is a good idea if you have multiple CPU threads that want to issue tasks to the GPU. That way you don't have to add locking or whatever yourself. I don't think ATI cards will pull from multiple queues simultaneously as I don't think they can execute kernels simultaneously. I would imagine the OpenCL runtime will interleave tasks between the queues assuming the needed events have completed.