Just a small correction the K80 is a dual GPU setup which means you get 2 GPU's with 2496 "CUDA cores" each and 12GB assigned to each GPU.
This isn't the same as having 1 GPU with 4992 cores and 24GB of memory.
CUDA kernel scaling is pretty decent but it's not 1:1 with additional GPU's it's also very much task specific so tasks that cannot be easily parallelized will not scale well or at all at least not without you splitting the workload manually.
As for the memory scaling CUDA supports P2P memcopy so you can easily move memory from 1 GPU to another (or between hosts in a network distributed configuration) but under best case scenarios this goes through a PCIE bridge (in the K80 it's onboard) but no NVLINK support on the K80 as it's 2 gens behind Pascal, if you are using P2P memcopy you do not double the memory capacity (even lose some since memcopy requires another buffer iirc).
CUDA also allows you to share the memory directly between multiple GPU's (and the CPU/Host) NVIDIA calls this Unified Addressing (OpenCL 2.0 later implemented something similar as Shared Virtual Memory) but this also comes at some cost the latency is greatly increased for memory access and you really need stellar code to make everything work properly if 1 GPU tries to dereference a pointer on another GPU while it's still is in use whelp "don't panic and move on" probably won't work :P