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.