I am planning on porting some of my CPU code to GPU. I want my code to run on all GPUs, so openCL seems to be the right choice. Will I be able to achieve the same performance as of CUDA in openCL?. What framework would do better if I want to support all GPUs?
It's performance vs. compatibility.
CUDA only works on "CUDA enabled" graphics cards. That means CUDA code can be sure that certain hardware features are present and can get more out of the GPU.
However, it also means it won't work everywhere. For NVIDIA cards, that means it won't work on cards older than the GeForce 8800 (from 2006, so not that bad). However, all AMD and Intel cards are right out. If we disregard Intel (because it's mostly cheapo laptop GPUs), that's roundabout half of GPUs out there which it won't work on.
So if you're a scientist, writing code to run on your own PC with a NVIDIA GPU, CUDA would be faster - but for games, you probably want to use OpenCl instead.