It all depends on the complexity of the scene, the size and number of textures used, and also on the kind of of GPU at your disposal.
GPU rendering can be faster than CPU on most modern graphics cards with lots of CUDA cores, but it is also limited by the amount of VRAM built on the card (usually not a lot). Once you've reached that limit, the rendering process will fail.
If there is only one GPU on your system, and the GPU is also being used to feed the monitor(s), even less VRAM will be available for rendering, as some of it will be already in use by open applications.
On systems with multiple GPUs the VRAM is not shared, and Blender will only use as much memory as in the smallest one of the card's.
When you render in CPU you can use all the RAM available in your system, and once you've reached the physical limit, the OS will start virtualizing memory by caching on disk. So for very complex scenes with big textures you might only be able to render on CPU.
A possible way to render complex scenes in GPU is to spit them in layers and combine them at the end (Read this link on blenderguru.com)
GPUs for laptops are in general not as powerful as the ones in desktops in terms of speed, number of CUDA cores or VRAM.
When it comes to older GPUs or with less CUDA cores, it is possible that CPU rendering might be faster. Specially if the CPU is multi-core (or multi-threaded).
In Cycles, blender will render as many tiles as there are CPU cores simultaneously. A single GPU will only render one tile at the time, multiple GPUs will render as may tiles as there are GPUs
To make rendering more efficient is important to find the size that works best for your machine. Sometimes larger sizes will render faster, but there are times when you need to keep them smaller for the machine to work efficiently.
GPUs work better with tile sizes ranging from 128x128 to 256x256, but CPUs seem to like smaller size tiles like 16x16 or 64x64.
Some operations in Cycles still only work on CPU (like smoke rendering).