Thread overview
Out of order execution
Jun 16, 2016
Joerg Joergonson
Jun 16, 2016
Andrea Fontana
Jun 16, 2016
Rene Zwanenburg
June 16, 2016
Suppose I have a loop where I execute two functions:

for(...)
{
   if (x) Do1(x);
   if (y) Do2(y);
}

The problem is, I really always want to execute all the Do2's first then the Do1's. As is, we could get any order of calls.

Suppose I can't run the loop twice for performance reasons(there is other stuff in it) and I don't want to store the state and call info then sort them out afterwards.

Is there an efficient lazy way to make this happen?


June 16, 2016
On Thursday, 16 June 2016 at 01:57:19 UTC, Joerg Joergonson wrote:
> Suppose I have a loop where I execute two functions:
>
> for(...)
> {
>    if (x) Do1(x);
>    if (y) Do2(y);
> }
>
> The problem is, I really always want to execute all the Do2's first then the Do1's. As is, we could get any order of calls.
>
> Suppose I can't run the loop twice for performance reasons(there is other stuff in it) and I don't want to store the state and call info then sort them out afterwards.
>
> Is there an efficient lazy way to make this happen?

Something like: https://dpaste.dzfl.pl/79b77c934825 ?
June 16, 2016
On Thursday, 16 June 2016 at 01:57:19 UTC, Joerg Joergonson wrote:
> Is there an efficient lazy way to make this happen?

No, I don't see how that would work.

> Suppose I can't run the loop twice for performance reasons(there is other stuff in it) and I don't want to store the state and call info then sort them out afterwards.

Storing the state is your best bet. Based on your recent post about OpenGL I assume this is for the same project?

If so, you can reuse the storage buffer between frames. Generally speaking it's the allocations that are slow, copying some state to a buffer shouldn't be expensive. Use separate buffers for the Do1 and Do2 calls so you don't have to sort.