1. A method providing: sharing memory semantics between a central processing unit (CPU) and a graphics processing unit (GPU) including allowing pointers to be passed and data structures to be shared as is between the CPU and GPU; allowing the same data structure stored in shared memory to be accessed by both the GPU and CPU; determining if the CPU and GPU have different page tables and different virtual to physical memory translations; in response to different page tables and different virtual to physical memory translations, synchronizing contents of virtual address between the CPU and GPU and contents of different physical addresses; wherein in response to different page tables and different virtual to physical memory translations, synchronizing the contents of virtual address between the CPU and GPU and the contents of different physical addresses further comprises: during initialization, mapping a portion of a PCI aperture that is accessible to both the CPU and GPU into the user space of an application and instantiating a user space with a task queue, a message queue, and copy buffers; for copying pages from the CPU to the GPU, copying pages from the CPU address space into the PCI aperture and having the GPU access the pages from the PCI aperture into its address space; and for copying pages from the GPU to the CPU, copying pages from the GPU address space into the PCI aperture and having the CPU access the pages from the PCI aperture into its address space.