On 05/31/2013 01:28 PM, Shriramana Sharma wrote:
On Fri, May 31, 2013 at 4:31 PM, Timon Gehr <timon.g...@gmx.ch> wrote:

If double uses xmm registers and real uses the fpu registers (as is standard
on x64), then double multiplication has twice the throughput of real
multiplication on recent intel microarchitectures.

Hi can you clarify that? I'm interested because I'm running a 64 bit
system. What does twice the throughput mean? double is faster?


Depends. Two useful numbers to classify performance characteristics of machine instructions are latency and reciprocal throughput.

Modern out-of-order processors are pipelined. I.e. instructions may take multiple cycles to complete, and multiple instructions may run through different stages of the pipeline at the same time.

Latency: The time taken from the point the point where all inputs are available to the point where all outputs are available.

Reciprocal throughput: The minimum delay between the start of two instructions of the same kind.

Multiplying doubles in an xmm register has latency 5 and reciprocal throughput 1 (on recent intel microarchitectures). Multiplying 'reals' in an fpu register has latency 5 and reciprocal throughput 2.


Therefore, doubles allow more instruction level parallelism (ILP). However, if you have eg. a computation like this one:

b = a*b*c*d;

Then there will not be a difference in runtime, as all instructions depend on a previous result.

On the other hand, if you reassociate the expression as follows:


b = (a*b)*(c*d);

Then double will be one cycle faster, since the second mult can be started one cycle earlier, and hence the third one can also start one cycle earlier.


If you are interested, more information is available here:

http://agner.org/optimize/#manuals


Reply via email to