On Wed, 2 Dec 2015 16:45:01 +0000
"Dumitrescu, Cristian" <cristian.dumitrescu at intel.com> wrote:
> + * * Neither the name of Intel Corporation nor the names of its
>
> Why is Intel mentioned here, as according to this license header Intel is not
> the copyright holder?
Copy/paste from other code.
> > +#ifndef _RTE_RECIPROCAL_H_
> > +#define _RTE_RECIPROCAL_H_
> > +
> > +struct rte_reciprocal {
> > + uint32_t m;
> > + uint8_t sh1, sh2;
> > +};
>
> The size of this structure is not a multiple of 32 bits. You seem to transfer
> this structure by value rather than by reference (the function
> rte_reciprocal_value() below returns an instance of this structure), I don't
> feel comfortable with the last 16 bits of the structure being left
> uninitialized, we should probably add some explicit pad field and initialize
> this structure explicitly to zero at init time?
Shouldn't matter for inline at all.
>
> > +
> > +static inline uint32_t rte_reciprocal_divide(uint32_t a, struct
> > rte_reciprocal
> > R)
> > +{
> > + uint32_t t = (uint32_t)(((uint64_t)a * R.m) >> 32);
> > +
> > + return (t + ((a - t) >> R.sh1)) >> R.sh2;
> > +}
> > +
> > +struct rte_reciprocal rte_reciprocal_value(uint32_t d);
>
> Why 32-bit arithmetic? We had a lot of bugs in librte_sched library due to
> 32-bit arithmetic that were particularly difficult to track. Can we have this
> function rte_reciprocal_divide() return a 64-bit integer and replace any
> 32-bit arithmetic/conversion with 64-bit operations?
Doing reciprocal divide by multiply requires a 2x temporary. So if it
used 64 bit math, it would require a 128 bit multiply.
> > +
> > +#endif /* _RTE_RECIPROCAL_H_ */
> > --
> > 2.1.4
>
> As previously discussed, a simpler/faster alternative to floating point
> division is 64-bit multiplication followed by right shift, any particular
> reason why this approach was not considered?
That is what this is. It is a 64 bit multiply (a * R.m) followed by a right
shift.
The only other stuff is related to round off and scaling.
I chose to use known working algorithm rather than writing and having to
do mathematical validation of any new code.