finding the induction variable after graphite (before ivcanon pass)?

Sebastian Pop sebpop@gmail.com
Thu May 26 15:21:00 GMT 2011


On Thu, May 26, 2011 at 09:58, Alexey Kravets <kayrick@ispras.ru> wrote:
> On 05/24/2011 10:09 PM, Sebastian Pop wrote:
>>
>> One change that I introduced sometime in February is that some reductions
>> are not translated to a zero dim array to make the dependence test work
>> on some of the interchange testcases.  With this change, are we going to
>> also create privatized copies for the reduction variables that are not
>> translated into zero dim arrays?
>>
>
> Hi Sebastian,
> Could you please provide some more details about these reductions?
> An example of loop nest or testcase with such reductions would be very
> helpful.

I think that most of the interchange-*.c files contain such reductions that
were not previously handled by the data dependence analysis, and thus
not interchanged.  I can see interchange-1.c and interchange-7.c have
reductions.

> In current graphite-opencl implementation only zero dim arrays can be
> privatized (but local scalar variables are always private).
>
> Currently we are not able to handle reduction between OpenCL kernels,
> so loops like this can not be transformed into kernel:
>
> for (i = 0; i < N; i++)
> sum += A[i];
>
> We are only able to handle reduction inside kernel's body by privatizing
> local reduction variable:
>
> for (j = 0; j < M; j++)
> {
>        int sum = 0;
>        for (i = 0; i < N; i++)
>                sum+= B[i];
>
> }
>
> In this case we privatize sum[0] (zero dim array created from scalar
> variable) inside kernel's body (outer loop will be replaced by kernel
> launch).

I see.  Would it be possible to strip mine the reduction loop that you say
not handled yet, and then translate to opencl the partial sums?

Thanks,
Sebastian



More information about the Gcc mailing list