lebedev.ri marked 2 inline comments as not done.
lebedev.ri added inline comments.


================
Comment at: docs/clang-tidy/checks/openmp-use-default-none.rst:12
+being implicitly determined, and thus forces developer to be explicit about the
+desired data scoping for each variable.
+
----------------
JonasToth wrote:
> lebedev.ri wrote:
> > JonasToth wrote:
> > > JonasToth wrote:
> > > > If I understand correctly the issue is more about implicitly shared 
> > > > variables that lead to data-races and bad access patterns, is that 
> > > > correct?
> > > > If so it might clarify the reason for this check, if added directly in 
> > > > the first motivational sentence.
> > > is it scoping or rather sharing? The scope is C++-terrain or at least 
> > > used in C++-Speak. Maybe there is a unambiguous word instead?
> > I'm not quite sure how to formulate the reasoning to be honest.
> > Let me try to show some reasonably-complete example:
> > https://godbolt.org/z/mMQhbr
> > 
> > We have 4 compilers: clang trunk + openmp 3.1, clang trunk + openmp 4, gcc 
> > 8, gcc trunk
> > 
> > We have 5 code samples, all operating with a `const` variable: (the same 
> > code, just different omp clauses)
> > * If no `default` clause is specified, every compiler is fine with the code.
> > * If `default(shared)` clause is specified, every compiler is still fine 
> > with the code.
> >   On this example, no clause and `default(shared)` clause are equivalent.
> >   I can't/won't claim whether or not that is always the case, as i'm mostly 
> > arguing re `default(none)`.
> > * If `default(none) shared(num)` is specified, all is also fine.
> >   That is equivalent to just the `default(none)` for OpenMP 3.1
> > * If `default(none) firstprivate(num)` is specified, all still fine fine.
> > * If only ``default(none)` is specified, things start to get wonky.
> >   The general idea is that before OpenMP 4.0 such `const` variables were 
> > auto-determined as `shared`,
> >   and now they won't. So one will need to add either `shared(num)` or 
> > `firstprivate(num)`.
> >   Except the older gcc will diagnose `shared(num)` :)
> > 
> > Roughly the same is true when the variable is not `const`: 
> > https://godbolt.org/z/wuouI_
> > 
> > Thus, `default(none)` forced one to be explicit about what shall be done 
> > with the variable,
> > should it be `shared`, or `firstprivate`.
> > 
> > 
> > ^ Not whether this rambling makes sense?
> Yes, so its about being explicit if state is shared or not. Given that its 
> hard to reason about parallel programs being explicit helps reading the code. 
> I think that could be condensed in a short motivation section.
> Yes, so its about being explicit if state is shared or not. Given that its 
> hard to reason about parallel programs being explicit helps reading the code. 
> I think that could be condensed in a short motivation section.

Yep. Will try to reword.

> is it scoping or rather sharing? The scope is C++-terrain or at least used in 
> C++-Speak. Maybe there is a unambiguous word instead?

E.g. clang messages say `variable 'num' must have explicitly specified data 
sharing attributes`
So "data sharing" i suppose.


================
Comment at: test/clang-tidy/openmp-use-default-none.cpp:53
+// 'parallel' directive can have 'default' clause, and said clause is 
specified,
+// with 'none' kind, all good.
+void t5(const int a) {
----------------
JonasToth wrote:
> Please add basic test-cases for the other constructs that are allowed to have 
> the `default` specified.
For the base directives (so 3x4 new tests) i assume,
not all the possible combinations of directives that are allowed to contain 
`default` (a *LOT* more tests)?


Repository:
  rCTE Clang Tools Extra

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D57113/new/

https://reviews.llvm.org/D57113



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to