I am a newbie in this arena, and I need to optimize an ASM function.
I'm getting some MOB load replays ret. events in some instructions that I'd want to understand .
First, let me tell you the context: a single-threaded application's function receiving two input arrays, and writes outputs in a third array. Everything pre-allocated, and of course non-overlapped memory ranges.
Now, I'm getting these MOB replays in both MMXregister-to-MMXregister operations (such as movq), as well as memory-to-MMXregister load operations.
I have two questions:
1- Is this event a precise event? In other words: when I see the event on a register-to-register op, is it an event skid, or it means that the source register still hasn't got the value so the stall comes from a previous instruction where it was loaded?
2- Why I'm getting this event, considering that I'm writing in an area very distanct from where I'm reading? (the three buffers are not overlapped). Rewriting the question: the input buffers are 'read only' for my ASM function, they were written long long ago before the first time my function was called.
I think it's obvious that a load will be stalled, since I'm reading from a different place I am writing, so the only way of getting the data is from the cache.
I will appreciate some compass on this.