Many of the people have asked almost the same question. 
I'm trying to render a big mesh + fur/grass file with a few characters on the screen.

when I hit render, after a number of processing, copying data to gpu etc... i get following error.

Mem: 2960.07M, Peak:2960.07M | CUDA error: Out of memory in cuMemAlloc(&device_pointer, size).

I'm using Geforce GTX 690 which contains 4GB memory. 

Can somebody tell me how can i get GPU rendering, while 2960M is far less then 4196M of memory. 

I know somebody would suggest me to use CPU.. but i'm curios why not GPU? 

I've already compressed texture, etc 

Edited
------

I don't think any other application is using any of my 1GB remaining memory. everything is closed but blender is there, also the GPU utilities are showing 2000/2000 MB are free on one card and 1900/2000MB is free on 2nd card.  

i'm using GTX 690. with two GPUs of 2GB each. If somebody thinks that one GPU should have memory matching to the cuda memory/or Peak memory then I'm doubtful. Because in preferences Blender does know that I have 2GPUs where I can select either first GPU or second GPU or even both. 

When I render some of smaller objects/scenes both of my GPU renders simultaneously with two blocks.

I'm running following specs

Xeon E5-1660 0
24GB - 1600mhz
GTX690