On Tue, 30 Jul 2024, Prathamesh Kulkarni wrote:

> 
> 
> > -----Original Message-----
> > From: Richard Sandiford <richard.sandif...@arm.com>
> > Sent: Monday, July 29, 2024 9:43 PM
> > To: Richard Biener <rguent...@suse.de>
> > Cc: Prathamesh Kulkarni <prathame...@nvidia.com>; gcc-
> > patc...@gcc.gnu.org
> > Subject: Re: Support streaming of poly_int for offloading when it's
> > degree <= accel's NUM_POLY_INT_COEFFS
> > 
> > External email: Use caution opening links or attachments
> > 
> > 
> > Richard Biener <rguent...@suse.de> writes:
> > > On Mon, 29 Jul 2024, Prathamesh Kulkarni wrote:
> > >
> > >> Hi Richard,
> > >> Thanks for your suggestions on RFC email, the attached patch adds
> > support for streaming of poly_int when it's degree <= accel's
> > NUM_POLY_INT_COEFFS.
> > >> The patch changes streaming of poly_int as follows:
> > >>
> > >> Streaming out poly_int:
> > >>
> > >> degree = poly_int.degree();
> > >> stream out degree;
> > >> for (i = 0; i < degree; i++)
> > >>   stream out poly_int.coeffs[i];
> > >>
> > >> Streaming in poly_int:
> > >>
> > >> stream in degree;
> > >> if (degree > NUM_POLY_INT_COEFFS)
> > >>   fatal_error();
> > >> stream in coeffs;
> > >> // Set remaining coeffs to zero in case degree < accel's
> > >> NUM_POLY_INT_COEFFS for (i = degree; i < NUM_POLY_INT_COEFFS; i++)
> > >>   poly_int.coeffs[i] = 0;
> > >>
> > >> Patch passes bootstrap+test and LTO bootstrap+test on aarch64-
> > linux-gnu.
> > >> LTO bootstrap+test on x86_64-linux-gnu in progress.
> > >>
> > >> I am not quite sure how to test it for offloading since currently
> > it's (entirely) broken for aarch64->nvptx.
> > >> I can give a try with x86_64->nvptx offloading if required (altho I
> > >> guess LTO bootstrap should test streaming changes ?)
> > >
> > > +  unsigned degree
> > > +    = bp_unpack_value (bp, BITS_PER_UNIT * sizeof (unsigned
> > > HOST_WIDE_INT));
> > >
> > > The NUM_POLY_INT_COEFFS target define doesn't seem to be constrained
> > > to any type it needs to fit into, using HOST_WIDE_INT is arbitrary.
> > > I'd say we should constrain it to a reasonable upper bound, like 2?
> > > Maybe even have MAX_NUM_POLY_INT_COEFFS or NUM_POLY_INT_COEFFS_BITS
> > in
> > > poly-int.h and constrain NUM_POLY_INT_COEFFS.
> > >
> > > The patch looks reasonable over all, but Richard S. should have a
> > say
> > > about the abstraction you chose and the poly-int adjustment.
> > 
> > Sorry if this has been discussed already, but could we instead stream
> > NUM_POLY_INT_COEFFS once per file, rather than once per poly_int?
> > It's a target invariant, and poly_int has wormed its way into lots of
> > things by now :)
> Hi Richard,
> The patch doesn't stream out NUM_POLY_INT_COEFFS, but the degree of poly_int 
> (and streams-out coeffs only up to degree, ignoring the higher zero coeffs).
> During streaming-in, it reads back the degree (and streamed coeffs upto 
> degree) and issues an error if degree > accel's NUM_POLY_INT_COEFFS, since we 
> can't
> (as-is) represent a degree-N poly_int on accel with NUM_POLY_INT_COEFFS < N. 
> If degree < accel's NUM_POLY_INT_COEFFS, the remaining coeffs are set to 0
> (similar to zero-extension). I posted more details in RFC: 
> https://gcc.gnu.org/pipermail/gcc/2024-July/244466.html
> 
> The attached patch defines MAX_NUM_POLY_INT_COEFFS_BITS in poly-int.h to 
> represent number of bits needed for max value of NUM_POLY_INT_COEFFS defined 
> by any target,
> and uses that for packing/unpacking degree of poly_int to/from bitstream, 
> which should make it independent of the type used for representing 
> NUM_POLY_INT_COEFFS by
> the target.

Just as additional comment - maybe we can avoid the POLY_INT_CST tree
side if we'd consistently "canonicalize" a POLY_INT_CST with zero
second coeff as INTEGER_CST instead?  This of course doesn't
generalize to NUM_POLY_INT_COEFFS == 3 vs NUM_POLY_INT_COEFFS == 2.

We still need the poly_int<> streaming support of course where I
would guess that 99% of the cases have a zero second coeff.

Richard.

> Bootstrap+test and LTO bootstrap+test in progress on aarch64-linux-gnu.
> Does the patch look OK ?
> 
> Signed-off-by: Prathamesh Kulkarni <prathame...@nvidia.com>
> 
> Thanks,
> Prathamesh
> > 
> > Thanks,
> > Richard
> 

-- 
Richard Biener <rguent...@suse.de>
SUSE Software Solutions Germany GmbH,
Frankenstrasse 146, 90461 Nuernberg, Germany;
GF: Ivo Totev, Andrew McDonald, Werner Knoblich; (HRB 36809, AG Nuernberg)

Reply via email to