This is the mail archive of the gcc-help@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

RE: Function Multiversioning in GCC6


Hi Victor,

Ah! That looks pretty cool. I'll have to try it out on Open vSwitch.

I don't know if I'll get the chance to use it right away but when I do I'll let you know how I got on.

Thanks,
Billy. 

> -----Original Message-----
> From: Victor Rodriguez [mailto:vm.rod25@gmail.com]
> Sent: Monday, April 10, 2017 10:43 PM
> To: O Mahony, Billy <billy.o.mahony@intel.com>
> Cc: Evgeny Stupachenko <evstupac@gmail.com>; Xi Ruoyao
> <ryxi@stu.xidian.edu.cn>; gcc-help@gcc.gnu.org
> Subject: Re: Function Multiversioning in GCC6
> 
> On Thu, Apr 6, 2017 at 5:04 AM, O Mahony, Billy <billy.o.mahony@intel.com>
> wrote:
> >
> >
> >> -----Original Message-----
> >> From: Victor Rodriguez [mailto:vm.rod25@gmail.com]
> >> Sent: Wednesday, April 5, 2017 8:09 PM
> >> To: O Mahony, Billy <billy.o.mahony@intel.com>; Evgeny Stupachenko
> >> <evstupac@gmail.com>
> >> Cc: Xi Ruoyao <ryxi@stu.xidian.edu.cn>; gcc-help@gcc.gnu.org
> >> Subject: Re: Function Multiversioning in GCC6
> >>
> >> On Tue, Apr 4, 2017 at 4:18 AM, O Mahony, Billy
> >> <billy.o.mahony@intel.com>
> >> wrote:
> >> > Hi Victor,
> >> >
> >> >> -----Original Message-----
> >> >> From: Victor Rodriguez [mailto:vm.rod25@gmail.com]
> >> >> Sent: Monday, April 3, 2017 10:29 PM
> >> >> To: O Mahony, Billy <billy.o.mahony@intel.com>
> >> >> Cc: Xi Ruoyao <ryxi@stu.xidian.edu.cn>; gcc-help@gcc.gnu.org
> >> >> Subject: Re: Function Multiversioning in GCC6
> >> >>
> >> >> On Thu, Mar 30, 2017 at 3:59 AM, O Mahony, Billy
> >> >> <billy.o.mahony@intel.com> wrote:
> >> >> > Hi Victor,
> >> >> >
> >> >> > Thanks to you and  Abraham Duenas, and Evgeny Stupachenko for
> >> >> > your
> >> >> work on FMV - it's a very neat feature and from my own
> >> >> investigations so far it works with minimal overhead even when
> >> >> used with inlined
> >> functions.
> >> >> >
> >> >> Welcome :)
> >> >>
> >> >> > One thing that could be stated explicitly in the article is that
> >> >> > use of the 'target' attribute with identically named functions
> >> >> > (i.e. the first code sample in the lwn article) is still
> >> >> > C++-only in gcc-6
> >> >>
> >> >> yes
> >> >>
> >> >> and if you want to do this with C you need to create your own
> >> >> ifunc resolver and have several differently named functions.
> >> >> >
> >> >>
> >> >> The idea is that you use one single funtion with just atributes ,
> >> >> instead of multiple funtions
> >> >>
> >> >> Why do you need old implementation of C++ FMV in C ?
> >> >
> >> > [[BO'M]]
> >> > I'm working on a code base that already has different definitions
> >> > of
> >> functions optimized for specific cpu instruction sets. One definition
> >> is picked by macro at compile time based on make flags.
> >> >
> >> Sounds interesting, If something is not optimized for particular
> >> target  you should file a bugzilla report. if is proper for your
> >> code, then as you mention FMV is not the best option. However try to
> >> reevaluate if this is the best approach for your application. Maybe
> >> is a good time to rewrite it and make more compact and understandable.
> >>
> >> > In my experiments with FMV I've looked at a hashing function. There
> >> > are
> >> two definitions - a pure C definition and one that uses sse42
> >> intrinsics. The pure C impl is really a set of inlined functions as I
> >> pulled it out of a suite of hashing functions (hash32, hash64,
> >> hash32_array, etc etc) for the purposes of the experiment.
> >> >
> >> > I'm assuming that, sophisticated as compilers are now, it won't
> >> > replace the
> >> several layers of  inlined C functions with single sse42 intrinsic
> >> call just because I specify "sse42" as one of the list of
> >> target_clones. So I stuck with the several definitions solution.
> >>
> >> Is your code open source ? so we can tak ea look ?
> > [[BO'M]] Hi Victor,
> > I'm looking at this wrt to Open vSwitch code
> > https://github.com/openvswitch/ovs
> >
> > As an experiment I was compiling a test program with both the sse42 and
> default versions of hash_words_inline function which are both in lib/hash.h.
> Currently one implementation or the other is chosen by compile time #def.
> >
> You can use our code to generate the FMV patch:
> 
> https://github.com/clearlinux/make-fmv-patch
> 
> You just need to build with -fopt-info-vec
> 
> The idea is to generate the patch automatically and then you can choose
> which patch to apply based on the functions you consider relevant for FMV
> 
> > It looks like ifunc is supported by the latest version of clang. Do you know if
> it is supported by BSD and Windows.
> 
> it is not as far as I know
> 
> Hope it helps
> 
> Regards
> Victor
> 
> >
> > Thanks,
> > Billy.
> >
> >>
> >> >
> >> >
> >> >>
> >> >> Regards
> >> >>
> >> >> > Thanks,
> >> >> > Billy.
> >> >> >
> >> >> >
> >> >> >
> >> >> >> -----Original Message-----
> >> >> >> From: Victor Rodriguez [mailto:vm.rod25@gmail.com]
> >> >> >> Sent: Thursday, March 30, 2017 1:10 AM
> >> >> >> To: O Mahony, Billy <billy.o.mahony@intel.com>
> >> >> >> Cc: Xi Ruoyao <ryxi@stu.xidian.edu.cn>; gcc-help@gcc.gnu.org
> >> >> >> Subject: Re: Function Multiversioning in GCC6
> >> >> >>
> >> >> >> On Thu, Mar 23, 2017 at 4:45 AM, O Mahony, Billy
> >> >> >> <billy.o.mahony@intel.com> wrote:
> >> >> >> >
> >> >> >> > Hi Xi,
> >> >> >> >
> >> >> >> > Thanks for the clarification/confirmation.
> >> >> >> >
> >> >> >> > Regards,
> >> >> >> > Billy.
> >> >> >> >
> >> >> >> > > -----Original Message-----
> >> >> >> > > From: Xi Ruoyao [mailto:ryxi@stu.xidian.edu.cn]
> >> >> >> > > Sent: Thursday, March 23, 2017 9:21 AM
> >> >> >> > > To: O Mahony, Billy <billy.o.mahony@intel.com>
> >> >> >> > > Cc: ryxi@stu.xidian.edu.cn; gcc-help@gcc.gnu.org
> >> >> >> > > Subject: Re: Function Multiversioning in GCC6
> >> >> >> > >
> >> >> >> > > On 2017-03-22 10:51 +0000, O Mahony, Billy wrote:
> >> >> >> > >
> >> >> >> > > > However when I compile the first example in this LWN
> >> >> >> > > > article https://lwn.net/Articles/691932/ with gcc-6 C
> >> >> >> > > > compiler it fails with
> >> >> >> > > > (error: redefinition of
> >> >> >> > > > 'foo'...) .
> >> >> >> > >
> >> >> >> > > The document
> >> >> >> > > <https://gcc.gnu.org/onlinedocs/gcc-6.3.0/gcc/Function-
> >> >> >> > > Multiversioning.html> said:
> >> >> >> > >
> >> >> >> > >     With the GNU *C++* front end, for x86 targets, you may
> >> >> >> > > specify multiple versions of the function.
> >> >> >> > >
> >> >> >> > > FMV doesn't work with C FE.  In C,
> >> >> >> > > __attribute__((target("sse4.2"))) just means to compile
> >> >> >> > > this function with -msse4.2, see
> >> >> >> > > <https://gcc.gnu.org/onlinedocs/gcc-6.3.0/gcc/Common-Functi
> >> >> >> > > on-
> >> >> >> > > Attributes.html>.
> >> >> >> > >
> >> >> >> > > --
> >> >> >> > > Xi Ruoyao <ryxi@stu.xidian.edu.cn> School of Aerospace
> >> >> >> > > Science and Technology, Xidian University
> >> >> >> >
> >> >> >>
> >> >> >> You can also read this LWN article:
> >> >> >>
> >> >> >> https://lwn.net/Articles/691932/

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]