[1/3] OpenACC reductions
Nathan Sidwell
nathan@acm.org
Tue Nov 3 16:02:00 GMT 2015
On 11/03/15 10:46, Jakub Jelinek wrote:
> On Mon, Nov 02, 2015 at 11:18:37AM -0500, Nathan Sidwell wrote:
>> This is the core execution bits of OpenACC reductions.
>>
>> We have a new internal fn 'IFN_GOACC_REDUCTION' and a new target hook
>> goacc.reduction, to lower it on the target compiler.
>
> So, let me start with a few questions:
> 1) does OpenACC allow UDRs or only the built-in reductions? If it
> does not allow UDRs, do you have it covered by testcases that you
> disallow parsing of them (e.g. when you have
no UDR reductions. Will check test cases for that.
> #pragma omp declare reduction (xyz: struct S: omp_out.x += omp_in.y) initializer (omp_priv = { 5 })
> #pragma acc parallel reduction (xyz: var_with_type_S)
> )?
> 2) how do you expand the reductions in the end when targetting host fallback
> or when targetting non-PTX targets?
That's what default_goacc_reduction is doing.
(I see its comment hasn't caught up with the changes I made during the merge.
Will fix)
LHS-opt = IFN_RED (KIND, RES_PTR, VAR, LEVEL, OP, OFFSET)
If RES_PTR is not integer-zerop:
SETUP - emit 'LHS = *RES_PTR', LHS = NULL
TEARDOWN - emit '*RES_PTR = VAR'
If LHS is not NULL
emit 'LHS = VAR'
This is the correct behaviour for a single-threaded loop. Of course the loop
could go on to be parallelized in the normal way -- or additional conversion to
openmp constructs along the same lines as we discussed for the GOACC_LOOP function.
Does that help?
nathan
More information about the Gcc-patches
mailing list