On Wed, 13 Nov 2013, Sergey Ostanevich wrote: > I will get some tests. > As for cost analysis - simply consider the pragma as a request to > vectorize. How can I - as a developer - enforce it beyond the pragma?
You can disable the cost model via -fvect-cost-model=unlimited Richard. > On Wed, Nov 13, 2013 at 12:55 PM, Richard Biener <rguent...@suse.de> wrote: > > On Tue, 12 Nov 2013, Sergey Ostanevich wrote: > > > >> The reason patch was in its original state is because we want > >> to notify user that his assumption of profitability may be wrong. > >> This is not a part of any spec and as far as I know ICC does not > >> notify user about the case. Still it can be a good hint for those > >> users who tries to get as much as possible performance. > >> > >> Richard's comment on the vectorization problems is about the same - > >> to inform user that his attempt to force vectorization is failed. > >> > >> As for profitable or not - sometimes I believe it's impossible to be > >> precise. For OMP we have case of a vector version of a function > >> and we have no chance to figure out whether it is profitable to use > >> it or to loose it. If we can't map the loop for any vector length > >> other than 1 - I believe in this case we have to bail out and report. > >> Is it about 'never profitable'? > > > > For example. I think we should report non-vectorized loops > > that are marked with force_vect anyway, with -Wdisabled-optimization. > > Another case is that a loop may be profitable to vectorize if > > the ISA supports a gather instruction but otherwise not. Or if the > > ISA supports efficient vector construction from N not loop > > invariant scalars (for vectorization of strided loads). > > > > Simply disregarding all of the cost analysis sounds completely > > bogus to me. > > > > I'd simply go for the diagnostic for now, not changing anything else. > > We want to have a good understanding about why the cost model is > > so bad that we have to force to ignore it for #pragma simd - thus we > > want testcases. > > > > Richard. > > > >> > >> On Tue, Nov 12, 2013 at 6:35 PM, Richard Biener <rguent...@suse.de> wrote: > >> > On 11/12/13 3:16 PM, Jakub Jelinek wrote: > >> >> On Tue, Nov 12, 2013 at 05:46:14PM +0400, Sergey Ostanevich wrote: > >> >>> ivdep just substitutes all cross-iteration data analysis, > >> >>> nothing related to cost model. ICC does not cancel its > >> >>> cost model in case of #pragma ivdep > >> >>> > >> >>> as for the safelen - OMP standart treats it as a limitation > >> >>> for the vector length. this means if no safelen is present > >> >>> an arbitrary vector length can be used. > >> >> > >> >> I was talking about GCC loop->safelen, which is INT_MAX for #pragma omp > >> >> simd > >> >> without safelen clause or #pragma simd without vectorlength clause. > >> >> > >> >>> so I believe loop->force_vect is the only trigger to disregard > >> >>> the cost model > >> >> > >> >> Anyway, in that case I think the originally posted patch is wrong, > >> >> if we want to treat force_vect as disregard all the cost model and > >> >> force vectorization (well, the name of the field already kind of suggest > >> >> that), then IMHO we should treat it the same as > >> >> -fvect-cost-model=unlimited > >> >> for those loops. > >> > > >> > Err - the user may have a specific sub-architecture in mind when using > >> > #pragma simd, if you say we should completely ignore the cost model > >> > then should we also sorry () if we cannot vectorize the loop (either > >> > because of GCC deficiencies or lack of sub-target support)? > >> > > >> > That said, at least in the cases that the cost model says the loop > >> > is never profitable to vectorize we should follow its advice. > >> > > >> > Richard. > >> > > >> >> Thus (untested): > >> >> > >> >> 2013-11-12 Jakub Jelinek <ja...@redhat.com> > >> >> > >> >> * tree-vect-loop.c (vect_estimate_min_profitable_iters): Use > >> >> unlimited cost model also for force_vect loops. > >> >> > >> >> --- gcc/tree-vect-loop.c.jj 2013-11-12 12:09:40.000000000 +0100 > >> >> +++ gcc/tree-vect-loop.c 2013-11-12 15:11:43.821404330 +0100 > >> >> @@ -2702,7 +2702,7 @@ vect_estimate_min_profitable_iters (loop > >> >> void *target_cost_data = LOOP_VINFO_TARGET_COST_DATA (loop_vinfo); > >> >> > >> >> /* Cost model disabled. */ > >> >> - if (unlimited_cost_model ()) > >> >> + if (unlimited_cost_model () || LOOP_VINFO_LOOP > >> >> (loop_vinfo)->force_vect) > >> >> { > >> >> dump_printf_loc (MSG_NOTE, vect_location, "cost model > >> >> disabled.\n"); > >> >> *ret_min_profitable_niters = 0; > >> >> > >> >> Jakub > >> >> > >> > > >> > >> > > > > -- > > Richard Biener <rguent...@suse.de> > > SUSE / SUSE Labs > > SUSE LINUX Products GmbH - Nuernberg - AG Nuernberg - HRB 16746 > > GF: Jeff Hawn, Jennifer Guild, Felix Imend > > -- Richard Biener <rguent...@suse.de> SUSE / SUSE Labs SUSE LINUX Products GmbH - Nuernberg - AG Nuernberg - HRB 16746 GF: Jeff Hawn, Jennifer Guild, Felix Imend"orffer