From: Sriraman Tallam <tmsriram@google.com>
To: "H.J. Lu" <hjl.tools@gmail.com>
Cc: Richard Guenther <richard.guenther@gmail.com>,
Jan Hubicka <jh@suse.cz>, Uros Bizjak <ubizjak@gmail.com>,
reply@codereview.appspotmail.com, gcc-patches@gcc.gnu.org,
David Li <davidxl@google.com>
Subject: Re: User directed Function Multiversioning via Function Overloading (issue5752064)
Date: Wed, 02 May 2012 17:44:00 -0000 [thread overview]
Message-ID: <CAAs8HmxrmBzsu6vejEhuequU0KYTDiCjg8HTxU1YuZ9wAm6PXA@mail.gmail.com> (raw)
In-Reply-To: <CAMe9rOpMjFN94+pkLJGO3xUEiDgTJ8i4Rx97-oucxue6SskKMQ@mail.gmail.com>
On Wed, May 2, 2012 at 9:05 AM, H.J. Lu <hjl.tools@gmail.com> wrote:
> On Wed, May 2, 2012 at 8:08 AM, Sriraman Tallam <tmsriram@google.com> wrote:
>> On Wed, May 2, 2012 at 6:42 AM, H.J. Lu <hjl.tools@gmail.com> wrote:
>>> On Tue, May 1, 2012 at 7:45 PM, Sriraman Tallam <tmsriram@google.com> wrote:
>>>> Hi H.J,
>>>>
>>>> Done now. Patch attached.
>>>>
>>>> Thanks,
>>>> -Sri.
>>>>
>>>> On Tue, May 1, 2012 at 5:08 PM, H.J. Lu <hjl.tools@gmail.com> wrote:
>>>>> On Tue, May 1, 2012 at 4:51 PM, Sriraman Tallam <tmsriram@google.com> wrote:
>>>>>> Hi,
>>>>>>
>>>>>> New patch attached, updated test case and fixed bugs related to
>>>>>> __PRETTY_FUNCTION_.
>>>>>>
>>>>>> Patch also available for review here: http://codereview.appspot.com/5752064
>>>>>
>>>>> @@ -0,0 +1,39 @@
>>>>> +/* Simple test case to check if Multiversioning works. */
>>>>> +/* { dg-do run } */
>>>>> +/* { dg-options "-O2 -fPIC" } */
>>>>> +
>>>>> +#include <assert.h>
>>>>> +
>>>>> +int foo ();
>>>>> +int foo () __attribute__ ((target("arch=corei7,sse4.2,popcnt")));
>>>>> +/* The target operands in this declaration and the definition are re-ordered.
>>>>> + This should still work. */
>>>>> +int foo () __attribute__ ((target("ssse3,avx2")));
>>>>> +
>>>>> +int (*p)() = &foo;
>>>>> +int main ()
>>>>> +{
>>>>> + return foo () + (*p)();
>>>>> +}
>>>>> +
>>>>> +int foo ()
>>>>> +{
>>>>> + return 0;
>>>>> +}
>>>>> +
>>>>> +int __attribute__ ((target("arch=corei7,sse4.2,popcnt")))
>>>>> +foo ()
>>>>> +{
>>>>> + assert (__builtin_cpu_is ("corei7")
>>>>> + && __builtin_cpu_supports ("sse4.2")
>>>>> + && __builtin_cpu_supports ("popcnt"));
>>>>> + return 0;
>>>>> +}
>>>>> +
>>>>> +int __attribute__ ((target("avx2,ssse3")))
>>>>> +foo ()
>>>>> +{
>>>>> + assert (__builtin_cpu_supports ("avx2")
>>>>> + && __builtin_cpu_supports ("ssse3"));
>>>>> + return 0;
>>>>> +}
>>>>>
>>>>> This test will pass if
>>>>>
>>>>> int foo ()
>>>>> {
>>>>> return 0;
>>>>> }
>>>>>
>>>>> is selected on processors with AVX. The run-time test should
>>>>> check that the right function is selected on the target processor,
>>>>> not the selected function matches the target attribute. You can
>>>>> do it by returning different values for each foo and call cpuid
>>>>> to check if the right foo is selected.
>>>>>
>>>>> You should add a testcase for __builtin_cpu_supports to check
>>>>> all valid arguments.
>>>>>
>>>>> --
>>>>> H.J.
>>>
>>> 2 questions:
>>>
>>> 1. Since AVX > SSE4 > SSSE3 > SSE3 > SSE2 > SSE, with
>>> foo for AVX and SSE3, on AVX processors, which foo will be
>>> selected?
>>
>> foo for AVX will get called since that appears ahead.
>>
>> The dispatching is done in the same order in which the functions are
>> specified. If, potentially, two foo versions can be dispatched for an
>> architecture, the first foo will get called. There is no way right
>> now to specify the order in which the dispatching should be done.
>
> This is very fragile. We know ISAs and processors. The source
> order should be irrelevant.
I am not sure it is always possible keep this dispatching unambiguous
to the user. It might be better to let the user specify a priority for
each version to control the order of dispatching.
Still, one way to implement what you said is to assign a significance
number to each ISA, where the number of sse4 > sse, for instance.
Then, the dispatching can be done in the descending order of
significance. What do you think?
I thought about this earlier and I was thinking along the lines of
letting the user specify a priority for each version, when there is
ambiguity.
>
>>
>>> 2. I don't see any tests for __builtin_cpu_supports ("XXX")
>>> nor __builtin_cpu_is ("XXX"). I think you need tests for
>>> them.
>>
>> This is already there as part of the previous CPU detection patch that
>> was submitted. Please see gcc.target/i386/builtin_target.c. Did you
>> want something else?
>
> gcc.target/i386/builtin_target.c doesn't test if __builtin_cpu_supports ("XXX")
> and __builtin_cpu_is ("XXX") are implemented correctly.
Oh, you mean like doing a CPUID again in the test case itself and checking, ok.
Thanks,
-Sri.
>
>
> --
> H.J.
next prev parent reply other threads:[~2012-05-02 17:44 UTC|newest]
Thread overview: 93+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-03-07 0:47 Sriraman Tallam
2012-03-07 14:05 ` Richard Guenther
2012-03-07 19:08 ` Sriraman Tallam
2012-03-08 21:37 ` Xinliang David Li
2012-03-08 21:00 ` Xinliang David Li
2012-03-09 20:04 ` Sriraman Tallam
2012-04-27 5:09 ` Sriraman Tallam
2012-04-27 13:39 ` H.J. Lu
2012-04-27 14:35 ` Sriraman Tallam
2012-04-27 14:39 ` H.J. Lu
2012-04-27 14:53 ` Sriraman Tallam
2012-04-27 15:36 ` H.J. Lu
2012-04-27 15:45 ` Sriraman Tallam
2012-05-01 23:51 ` Sriraman Tallam
2012-05-02 0:09 ` H.J. Lu
2012-05-02 2:45 ` Sriraman Tallam
2012-05-02 13:42 ` H.J. Lu
2012-05-02 15:08 ` Sriraman Tallam
2012-05-02 16:06 ` H.J. Lu
2012-05-02 17:44 ` Sriraman Tallam [this message]
2012-05-02 18:04 ` H.J. Lu
2012-05-07 16:58 ` Sriraman Tallam
2012-05-09 19:01 ` Sriraman Tallam
2012-05-10 17:55 ` H.J. Lu
2012-05-12 2:04 ` Sriraman Tallam
2012-05-12 13:38 ` H.J. Lu
2012-05-14 18:29 ` Sriraman Tallam
2012-05-26 0:07 ` H.J. Lu
2012-05-26 0:16 ` Sriraman Tallam
2012-05-26 0:27 ` H.J. Lu
2012-05-26 1:54 ` Sriraman Tallam
[not found] ` <CAMe9rOowm9K7r1xnRdRjW5Y4Ay+WxgSsBLTgGvq24z=i42AS+g@mail.gmail.com>
[not found] ` <CAAs8HmzeQigcLQyfkC02u=6gCTLkjLLa_jYmp+b1HEtpMCrYWw@mail.gmail.com>
2012-05-26 5:06 ` H.J. Lu
2012-05-26 22:35 ` Sriraman Tallam
2012-05-26 23:56 ` H.J. Lu
2012-05-27 0:24 ` Sriraman Tallam
2012-05-27 2:06 ` H.J. Lu
2012-05-27 2:23 ` Sriraman Tallam
2012-05-27 2:31 ` H.J. Lu
2012-05-27 19:02 ` Ian Lance Taylor
2012-06-04 19:01 ` Sriraman Tallam
2012-06-04 21:36 ` H.J. Lu
2012-06-04 22:29 ` Sriraman Tallam
2012-06-05 13:56 ` H.J. Lu
2012-06-14 20:35 ` Sriraman Tallam
2012-06-20 1:10 ` Sriraman Tallam
2012-07-06 9:14 ` Richard Guenther
2012-07-06 17:38 ` Sriraman Tallam
2012-07-07 6:06 ` Jason Merrill
2012-07-07 18:38 ` Xinliang David Li
2012-07-08 11:21 ` Jason Merrill
2012-07-09 21:27 ` Xinliang David Li
2012-07-10 9:46 ` Jason Merrill
2012-07-10 16:09 ` Xinliang David Li
[not found] ` <CAAs8HmxHF38ktt6syjWp-MpjiX+6NcXh7_8Xn6iKnAiF2vRymQ@mail.gmail.com>
2012-07-19 20:40 ` Jason Merrill
2012-07-30 19:16 ` Sriraman Tallam
2012-08-25 0:34 ` Sriraman Tallam
2012-09-18 16:29 ` Sriraman Tallam
2012-10-05 17:07 ` Xinliang David Li
2012-10-05 17:44 ` Jason Merrill
2012-10-05 18:14 ` Jason Merrill
2012-10-05 21:58 ` Sriraman Tallam
2012-10-05 22:50 ` Jason Merrill
2012-10-05 23:45 ` Sriraman Tallam
2012-10-05 18:32 ` Jason Merrill
2012-10-11 0:13 ` Sriraman Tallam
2012-10-12 22:41 ` Sriraman Tallam
2012-10-19 15:23 ` Diego Novillo
2012-10-20 4:29 ` Sriraman Tallam
2012-10-23 21:21 ` Sriraman Tallam
2012-10-26 16:53 ` Jan Hubicka
2012-10-28 4:31 ` Sriraman Tallam
2012-10-29 13:05 ` Jan Hubicka
2012-10-29 17:56 ` Sriraman Tallam
2012-10-30 19:18 ` Jason Merrill
2012-10-31 0:58 ` Sriraman Tallam
[not found] ` <CAAs8Hmw09giv-5_v0irhByTjTJV=kD58rCAD2SAz7M8zrwjBOA@mail.gmail.com>
2012-10-31 14:27 ` Jason Merrill
2012-11-02 2:53 ` Sriraman Tallam
2012-11-06 2:38 ` Sriraman Tallam
2012-11-06 15:52 ` Jason Merrill
2012-11-06 18:17 ` Sriraman Tallam
2012-11-10 1:33 ` Sriraman Tallam
2012-11-12 5:04 ` Jason Merrill
2012-11-13 1:11 ` Sriraman Tallam
2012-11-13 2:39 ` Jason Merrill
2012-11-13 21:57 ` Sriraman Tallam
2012-11-17 22:23 ` H.J. Lu
2012-11-06 22:15 ` Gerald Pfeifer
2012-10-26 14:11 ` Diego Novillo
2012-10-26 16:54 Xinliang David Li
2012-10-26 17:28 ` Sriraman Tallam
2012-11-06 22:17 Dominique Dhumieres
2012-11-07 1:16 ` Gerald Pfeifer
2012-11-07 8:53 ` Dominique Dhumieres
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=CAAs8HmxrmBzsu6vejEhuequU0KYTDiCjg8HTxU1YuZ9wAm6PXA@mail.gmail.com \
--to=tmsriram@google.com \
--cc=davidxl@google.com \
--cc=gcc-patches@gcc.gnu.org \
--cc=hjl.tools@gmail.com \
--cc=jh@suse.cz \
--cc=reply@codereview.appspotmail.com \
--cc=richard.guenther@gmail.com \
--cc=ubizjak@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).