This is the mail archive of the gcc-patches@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: Initial submission of OpenACC support integrated into OpenMP's lowering and expansion passes


Hi, Thomas!

This is really great!
I've looked at your changes and in most of front-end parts it looks reasonable to me. As you know, we're like-minded with you about how OpenACC's front-ends should look like. So, I think it's good that you have working flow for your implementation. Now we can start to merge front-ends from openacc-1_0-branch to GOMP, while keeping all understandings of ACC in sync and working.

Jakub, don't you mind if I prepare a few front-end patches likewise for review to extend Thomas' vision with the things that was already done by my colleagues on the ACC branch? I hope it'll much speed up the development.

> the last patch adds GOACC_parallel, which so far simply branches to 
> GOMP_target.  There's more to come.
I've reviewed ACC-related code from [openacc-1_0-branch] and from the patches, I noticed there are some mess around marking OpenACC specific code. There are ACC, GACC, OACC, GOACC abbreviations used across code, which one is the best? I prefer ACC, this is not critical, I'm just curious how to resolve this.

> Due to the conceptual similarity compared to OpenMP, and that (later) 
> it is reasonable to expect to embed OpenACC directives into OpenMP 
> ones, the approach I've chosen is to directly embed OpenACC handling 
> into the existing OpenMP infrastructure/passes.
Regarding front-ends, not only from view of OMP/ACC, but front-ends itself, it makes sense to move some parsing routines out of gomp/acc context. This will be useful to implement not only ACC, but also HMPP, if someone is interested, or other similar technology. And of cause, these functions should be used behind the existing facilities - not to break current implementation and other dependencies. So it won't not introduce any difficulties for back porting, while generalizing front-ends a bit.
For now, I prefer to extend the approved way of developing, but keep it in mind, please.

> This patch series doesn't contain any substantial rumtime library work 
> yet;
Can you share some technical details/ideas about further implementation, it's not going to be trivial. On the [openacc-1_0-branch] we resolved it with OpenCL-driven runtime. Also, OpenACC 2.0 standard declares some vendor-specific routines, this should be noted too.

> This is in contrast to Samsung's work, who are implementing OpenACC
> separately from the existing OpenMP support.
I'm not fully agree that this in contrast to things are taking place in [openacc-1_0-branch]. The main reason for keeping middle-end and back-end solutions far from GOMP is the understanding of OpenACC semantics and unclear understanding of what should be done to generalize support of accelerators in GCC. OpenACC and OpenOMP has some semantically differences, but such things matters only for middle-end and further code generation. The main one, is the memory concept. The 

> Yet, I hope we'll be able to share/re-use at least front end and some
middle end code.
I absolutely agree, it's needed to merge our efforts regarding front-ends.
Many things from ACC in [openacc-1_0-branch] is already done, so it doesn't necessary to re-implement same things. Maybe we can polish front-ends together and then commit changes to GOMP?

> We directly strive for OpenACC 2.0 support, skipping OpenACC 1.  We're 
> focussing on the C front end implementation first, following on with 
> C++ and Fortran later on.
How do you think, does it make sense to adopt current Fortran implementation from the OpenACC branch? This can be done quite soon. Also, I may help to extend C and C++ front-end the same way it's done now, by adding other implemented directives, too.

Regarding proposed patches:
[8/9] c_parser_omp_all_clauses and cp_parser_omp_all_clauses
-	  c_parser_error (parser, "expected %<#pragma omp%> clause");
+	  c_parser_error (parser, "expected clause");

-	  cp_parser_error (parser, "expected %<#pragma omp%> clause");
+	  cp_parser_error (parser, "expected clause");
Does it really needed to remove %<#pragma omp%> in these cases? We handle both, I think.

[9/9]
* gimple.h (gimple_build_oacc_*): New declaration.
gimple_oacc_parallel_* and other functions like that. Let's move these functions out of gimple.* to gimple-oacc.*! There are going to be much more of the stuff like this, maybe it'll make sense to keep it externally? May be not only gimple manipulation functions but also pretty-print Also, have a look on openacc_1-0_branch please, for gimple-oacc.*, is OK if I'll add some of this?

Handling clauses.
+  GIMPLE_CHECK (gs, GIMPLE_OACC_PARALLEL);  
+ gs->gimple_omp_parallel.clauses = clauses;
I think, we can freely add some kind of flag to gimple_omp_parallel to indicate that we're are working with ACC.
Or even add new gimple_acc_* statements.

On gimplification, lowering stuff and further, I think it's okay if targeting GOMP_target, but on my view, this is going to prevent us from emiting OpenCL or do some extended analysis of the code for error analysis to be offloaded. May be introduce some switch that turns on OpenCL generation or GOMP_targeting dependently on the state?

I hope my colleagues will correct me, if I forgot something.

-
Thanks,  
    Evgeny.


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