- Use the GPUVM inside the GPU to access system memory. The
limitation here is that the GPUVM uses 40-bit addresses, so the virtual address range must be in the lower 40-bit address range of the CPU. Access speed is limited by PCI-e bandwidth. Another limitation is that the system memory pages must be pinned as the GPU doesn't support page faults.
The operation of reserving address space and BO creation is one IOCTL, while the mapping of the BO to the address space is a second IOCTL. There are of course unmap and free IOCTLs. The separation is done for a couple of reasons:
- If the application knows that it wants to use only part of the
memory area it allocated, then there is no point in pinning all the BOs. So, the application can map/unmap just part of the allocation.
- If the application knows that it has finished using the BOs, and it
also knows that it will use them later on, it can unmap the BOs (to make them unpinned) but not free them so the memory is still reserved (with its contents intact).
Yes, thanks Oled. I think this is pretty much exactly how I imagine things to work.
I'll post my code soon and see what you guys think. There was some misunderstanding on my part on how bo's work, so I need to rework some stuff.