skatrak wrote:

> No you are right, sorry for the back and forth, as you said, since a wsloop 
> can only be nested in a omp.parallel it is immediately obvious that it binds 
> to the omp.parallel threads so that makes sense.
> 
> My only concern was that at some point some transformation (perhaps in the 
> future, because I don't think anything transforms `wsloop`s currently) could 
> make the assumption that either all or none of the threads of the team an 
> `omp.parallel` launches will execute the parent block of a `wsloop` that 
> binds to that team. (for example an optimization/transformation could add an 
> operation immediately before the wsloop which is supposed to be executed by 
> all threads (or none) in the omp.parallel. that operation would then be 
> erroneously wrapped in an omp.single in LowerWorkshare.)
> 
> I thought this was a fair assumption for an optimization/transformation to 
> make because if for example only one of the threads executes a wsloop it 
> would not produce the intended result. So the intention was to guard against 
> a potential error like that. Let me know if I am wrong here since I am sure 
> people here have more experience than me on this.

Thank you for bringing attention to this potential issue I hadn't considered, I 
think it's a productive discussion. I'm not aware of any transformations like 
that existing at the moment either, but it looks like they would certainly 
break if they ran while the `omp.workshare` operation still remained. However, 
they would work if they ran after the pass lowering `omp.workshare` to a set of 
`omp.single` for the code in between `omp.wsloop`s. That way we would not have 
to introduce a new loop wrapper and also we could create passes assuming the 
parent of region of an `omp.wsloop` is executed by all threads in the team. I 
don't think that should be an issue, since in principle it makes sense to me 
that the `omp.workshare` transformation would run immediately after PFT to MLIR 
lowering. What do you think about that alternative?

https://github.com/llvm/llvm-project/pull/101445
_______________________________________________
llvm-branch-commits mailing list
llvm-branch-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits

Reply via email to