In https://github.com/vortexgpgpu/vortex/blob/master/hw/rtl/VX_config.vh it can be seen that base stack pointer and first address of local memory are the same address, but stack "grows" in different direction from local memory. So the stack resides in global memory, and, when registers are spilled, they are spilled to global memory?
It conserns me a little because I've found other solutions when registers are spilled into local memory:
- https://developer.download.nvidia.com/CUDA/training/register_spilling.pdf
- https://arxiv.org/pdf/1907.02894
Is my understanding that vortex uses global memory for stack (and, in particular, register spilling) correct? If that's true, what is the reason for choosing global memory instead of local memory for that?
In https://github.com/vortexgpgpu/vortex/blob/master/hw/rtl/VX_config.vh it can be seen that base stack pointer and first address of local memory are the same address, but stack "grows" in different direction from local memory. So the stack resides in global memory, and, when registers are spilled, they are spilled to global memory?
It conserns me a little because I've found other solutions when registers are spilled into local memory:
Is my understanding that vortex uses global memory for stack (and, in particular, register spilling) correct? If that's true, what is the reason for choosing global memory instead of local memory for that?