[LLVMdev] Proposal for ""llvm.mem.vectorize.safelen"
Tian, Xinmin
xinmin.tian at intel.com
Sun Sep 28 13:40:52 PDT 2014
More precisely, for a simd loop, if the safelen(VL) clause is specified, there should have no loop-carried lexical backward data dependency within the specified safe vector length VL.
We will make this clear in the OpenMP 4.1 spec.
Xinmin Tian (Intel)
-----Original Message-----
From: llvmdev-bounces at cs.uiuc.edu [mailto:llvmdev-bounces at cs.uiuc.edu] On Behalf Of Hal Finkel
Sent: Sunday, September 28, 2014 12:59 AM
To: Robison, Arch
Cc: Jonathan Humphreys; LLVM Dev
Subject: Re: [LLVMdev] Proposal for ""llvm.mem.vectorize.safelen"
----- Original Message -----
> From: "Arch Robison" <arch.robison at intel.com<mailto:arch.robison at intel.com>>
> To: "Jonathan Humphreys" <j-humphreys at ti.com<mailto:j-humphreys at ti.com>>, "Hal Finkel" <hfinkel at anl.gov<mailto:hfinkel at anl.gov>>, "Renato Golin"
> <renato.golin at linaro.org<mailto:renato.golin at linaro.org>>, "Alexander Musman
> (alexander.musman at gmail.com<mailto:alexander.musman at gmail.com>)" <alexander.musman at gmail.com<mailto:alexander.musman at gmail.com>>
> Cc: "LLVM Dev" <llvmdev at cs.uiuc.edu<mailto:llvmdev at cs.uiuc.edu>>
> Sent: Thursday, August 28, 2014 12:32:25 PM
> Subject: RE: [LLVMdev] Proposal for ""llvm.mem.vectorize.safelen"
>
> It's a problem in the OpenMP specification. The authors (including
> some from Intel) intended that the OpenMP simd construct assert no
> lexically backward dependences exist, but as you say, it's not obvious
> from the spec. One of our OpenMP community members is going to bring
> up the ambiguity with the OpenMP committee.
What was the outcome of this?
Thanks again,
Hal
>
> - Arch
>
> -----Original Message-----
> From: Humphreys, Jonathan [mailto:j-humphreys at ti.com]
> Sent: Thursday, August 28, 2014 11:53 AM
> To: Robison, Arch; Hal Finkel; Renato Golin; Alexander Musman
> (alexander.musman at gmail.com<mailto:alexander.musman at gmail.com>)
> Cc: LLVM Dev
> Subject: RE: [LLVMdev] Proposal for ""llvm.mem.vectorize.safelen"
>
> Well, having not understood the connection between lexical dependence
> and the openMP simd construct yesterday, I inquired in the openMP
> community. If I understand the answer I got (from someone at Intel),
> the openMP simd construct is really asserting that no lexically
> backward dependences exist. This is not at all obvious to me from
> reading the spec.
>
> That answer seems to be in conflict with what you are saying below.
>
> Thanks
> Jon
>
> -----Original Message-----
> From: Robison, Arch [mailto:arch.robison at intel.com]
> Sent: Thursday, August 28, 2014 10:47 AM
> To: Humphreys, Jonathan; Hal Finkel; Renato Golin; Alexander Musman
> (alexander.musman at gmail.com<mailto:alexander.musman at gmail.com>)
> Cc: LLVM Dev
> Subject: RE: [LLVMdev] Proposal for ""llvm.mem.vectorize.safelen"
>
> > Sorry for coming to the discussion so late. I have a couple of
> > questions/comments:
>
> Actually, you're note is timely, because I'm planning to send out a
> patch (as soon as I update LangRef and rerun tests) that supports
> safelen but *not* lexical dependences. I don't need the safelen for
> Julia, but having done the work and seeing that OpenMP needs it, feel
> that I should finish the work to contribute it.
>
> Yes, safelen and lexical forward dependences are separable. I was
> initially under the impression that to implement OpenMP 4.0 simd loops
> correctly, support for both safelen and lexical forward dependences
> were necessary. Indeed, the Intel compiler supports forward lexical
> dependences in OpenMP 4.0 simd loops.
> (Sophisticated vectorizers have to support them anyway for
> auto-vectorization.) But upon closer reading, and discussion with the
> experts here, it became apparent that the OpenMP 4.0 spec talks about
> execution of SIMD instructions, but does not say much about how source
> code is mapped onto those instructions, so support for lexical
> dependences is not necessary for 4.0.
>
> Likewise, I'm dropping my experiment with supporting lexical forward
> dependences in Julia, though I'm mulling an alternative language-level
> solution.
>
> > Assuming that lexical ordering is irrelevant to this discussion, it
> > would be nice if we could build upon the
> > llvm.mem.parallel_loop_access metadata rather than inventing more
> > metadata.
>
> Right.
>
> > I was thinking that you could add an additional parameter that
> > specifies the minimum dependence distance. It would be optional and
> > if absent, would be infinite (which preserves existing semantics).
>
> The parameter is best put on the loop instead of each access. That
> way it can have different values for different loop levels. I.e.,
> each loop is marked with its relevant component of the minimum
> distance vector.
>
> With respect to a more general mechanism, and perhaps more complete
> distance information, that seems worthwhile if there's real benefit to
> be obtained. I'll leave that to others, though I'd be curious to see
> proposed designs. I haven't explored the limits of LLVM's metadata
> format. For instance, what's the best way to store a distance matrix
> as metadata?
>
> - I agree with Hal's request that we don't use the name 'safelen'
>
> I'm fine with the "minimum_dependence_distance" if everyone else is.
>
> - Arch
>
> -----Original Message-----
> From: Humphreys, Jonathan [mailto:j-humphreys at ti.com]
> Sent: Wednesday, August 27, 2014 5:37 PM
> To: Robison, Arch; Hal Finkel; Renato Golin; Alexander Musman
> (alexander.musman at gmail.com<mailto:alexander.musman at gmail.com>)
> Cc: LLVM Dev
> Subject: RE: [LLVMdev] Proposal for ""llvm.mem.vectorize.safelen"
>
> Sorry for coming to the discussion so late. I have a couple of
> questions/comments:
> - I'm no openMP expert but I don't understand the relevance of
> lexically forward or backward dependence with respect to the
> safelen() metadata. I would be surprised if the openMP spec based
> safelen() upon lexical ordering for the reasons that you are running
> up against.
> - I agree with Hal's request that we don't use the name 'safelen'.
> I can think of many other 'safety' requirements for SIMD (such as
> alignment), and the proposed metadata is specifically addressing
> memory dependence.
> - what are the semantics for outer loop dependences in nested loops?
> I believe that openMP restricts the usage of this clause to nested
> loops that are perfectly nested and collapsible. We will be
> introducing this metadata in LLVM without such restrictions.
> - Assuming that lexical ordering is irrelevant to this discussion,
> it would be nice if we could build upon the
> llvm.mem.parallel_loop_access metadata rather than inventing more
> metadata. I was thinking that you could add an additional parameter
> that specifies the minimum dependence distance. It would be optional
> and if absent, would be infinite (which preserves existing
> semantics).
> - And having said that, I'm also wondering (but haven't thought any
> of it through) if instead of inventing metadata to address particular
> language features, we should instead invent a more general mechanism
> for expressing memory independence through metadata. Then the
> expression of a language feature could be decomposed into basic
> dependence metadata. There are many advantages to this. It would be
> more precise (operation based vs loop based). Being basic/lowlevel,
> passes that invalidate it (or enhance it) can do that at a
> fundamental level and not need to be aware of a specific language
> feature that might be implied in the name of the metadata. And being
> more precise, it would be more robust because any pass that
> introduces memory operations would not have the metadata and so
> wouldn't inherit assertions that might not be true for it.
>
> Jon
>
>
--
Hal Finkel
Assistant Computational Scientist
Leadership Computing Facility
Argonne National Laboratory
_______________________________________________
LLVM Developers mailing list
LLVMdev at cs.uiuc.edu<mailto:LLVMdev at cs.uiuc.edu> http://llvm.cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20140928/0f0833ee/attachment.html>
More information about the llvm-dev
mailing list