I am considering developing an executable that copies system RAM to external media, for Windows. I want to impact as little as possible on RAM, hence i am considering attempting to run the exe on the GPU and use graphical memory as a buffer, for example. I am time constrained and was wondering would anyone be able to help me with the following queries, as i am unfamiliar with OPENCL and graphics programming:
1) Can i access all memory addresses directly from the Graphics card? (as windows prevents access to some memory addresses i believe)
2) Will i be ale to keep the impact on RAM minimal (couple of megs for example)
Thanks in advance for any input.
AMD video cards can access RAM directly on the host. However, this is fairly slow since it's over the PCIe bus and the driver has to lock the page for you to do this, meaning you can get severe performance hits if you do this too often. I'm not sure if you can pass it arbitrary addresses (e.g. those used by other applications), but it wouldn't surprise me if you could since drivers operate in kernel mode and theoretically should have permission to. I except the impact on RAM would be minimal in the sense of extra allocations, but you probably would see performance implications from doing this.
However, you can't run arbitrary executables soley on the GPU; they don't have interrupts, a stack, or any of the other things that real applications need. So, without any extra information, I would be skeptical you can do what you want to do.
What are you planning to do by copying all your RAM data to the GPU memory?
Well generally data transfer times are bottlenecks in GPGPU and copying is slow on PCIe. Also I am not very sure if you would be able to access the complete RAM by the kernel application.