GSR primitive is not an actual connection to the GSR net. It is just a virtual primitive for simulation purposes. I don't know if there us a way to assert GSR from the user logic.
Well, if you use an asynchronous reset in all or some of your processes, it will usually be tied to the GSR tree. If you use only one async reset signal in your whole design, it's likely what will happen (but check the reports). If you use several different async reset signals, the tool will pick the one that makes the most "sense" to it - usually the one that's distributed across the most LUTs.
Now the "source" of this async reset signal matters. If it's an IO (used as a reset pin), selected appropriately (usually one of the global clock things), that should work. If it's an internal signal, not necessarily. Again, check the reports.
And whether you're comfortable using async resets is another story. If done with care, it's usable.
I've never used any signal initialization in HDL with these chips and have only initialized signals in async resets in processes and it's always worked as expected. Whether it's the right approach in any particular case is yours to determine.