schell@iris.ucdavis.edu (Stephan Schell) (08/12/89)
Why do integer multiplies take longer than double precision floating point multiplies (at least, in C) ? I timed 180K integer multiply-accumulates and 206K double precision floating point multiply accumulates (including integer-to-double conversion) using the "times()" function. This seems kind of hokey that integer multiplies run slower than double precision floats, doesn't it? Steve Dept of EE & CS Univ. Calif., Davis
daryl@hpcllla.HP.COM (Daryl Odnert) (08/15/89)
First, remember that as a RISC architecture, HP Precision Architecture
does not have a generalized integer multiply instruction. However,
* Multiplication by compile-time constants can generally be
performed in four or fewer (single-cycle) instructions.
* Multiplications by variables, including full overflow checking,
can be obtained in an average of less than 20 single-cycle
instructions. (This average is based on an expected distribution
where 80% of the time, the absolute value of one of the operands
of the multiply is <= 255.)
* Multiplications involving large operands (where the smallest
absolute value of the two operands is > 4K) can take between
36 and 56 cycles to complete.
These datapoints were taken from "Integer Multiplication and Division
on the HP Precision Architecture", Proceedings of the Second International
Conference on Architectural Support for Programming Languages and
Operating Systems (ASPLOS II), ACM, October 1987.
For floating-point, I think a double precision FMPY instruction on
the 9000/825 takes somewhere in the neighborhood of 15 to 20 cycles
to complete. An integer to floating point conversion probably takes
about the same amount of time.
Thus, if the typical operands to your integer multiplies are large
values and not determined to be constants by the compiler, your results
are reasonable.
How are the operands to your multiplies computed?
Also, did you use full optimization at compile time?
Daryl Odnert
Hewlett Packard California Languages Lab
daryl%hpcllla@hplabs.hp.comraj@hpindwa.HP.COM (Richard Jones) (08/15/89)
why is floating-point faster than integer??? one reason could be that the floating point is going to a co-processor, and the integer is being handled by millicode... ...your performance will vary raj
ronw@hpuflfa.HP.COM (Ron Williams) (08/16/89)
Note that HP-PA has no integer multiply instruction. Multiplying by a constant
gives fairly good performance since the comiler produces as series of shifts
and adds. Multiplying by variables uses the millicode. For integer division
there are instructions that are used which are primitive instructions which
allow the process to be performed in single cycle steps.
Ron Williams HP Ft. Lauderdale ronw@hpfcse
------------ TEL: T-938-2278 {hpfcse}!hpuflfa!ronw
FAX: T-938-2293 COMSYS: 3179
AREA CODE: 305 HPDESK: Ron Williams / HP3179/07