Interesting question and I will offer you two points of what I have found out in my fights with the SSRS server across multiple platforms and environments:
The greatest problem in speed with SSRS seems to come from the service itself recycling itself every 12 hours I believe on 2008 and 2012. Not sure of prior to that. What I have done is create 'keep alive' service calls that just go to the root of http:// (servername)/ReportServer and ping it to keep it alive. It tends to go slow if it has not had activity in over that amount of time.
I know that if you are adventuresome and you know .NET you can try to see if you can generate the report or report(s) multiple times. Basically the process to use C# you call the web service of SSRS directly in code(I make a proxy class to do this) and then you load the report up to the service, the parameters, then render it. You may be able when you instill an instance of that to load it multiple times. I never have tried it, but rendering reports directly from the proxy is surprisingly fast in the few instances I have tried it.
There is a session ID in this method but I am not certain is the session is kept to the report render or the invoke of the server. I would guess the report render but I have never tested this as I generally invoke my method for creations one at a time and they have been fast enough for my specifications.
Here is a link for #2 if you are interested: Programmatically Export SSRS report from sharepoint using ReportService2010.asmx