[Beignet] a question about default optimize option when building

Zhigang Gong zhigang.gong at linux.intel.com
Thu Feb 12 00:56:38 PST 2015


Athough theoretically this is doable for OpenCL, if user could guarantee all the buffers
are not overlapped, then the compiler could do more aggresive optimization to merge duplicate
loads.

But you can check the OpenCL C spec or C99 spec, there are no such type of attribute qualifiers
defined, so there is no safe/portable way to do this type of optimization from compiler side
currently.

On Thu, Feb 12, 2015 at 05:32:08PM +0800, 彭席汉 wrote:
> Any way to tell compiler I have no side effect for memory pointer p and I don't want to load it again?
> 
> 
> 
> 
> 彭席汉
> 2015-02-12
> 
> 
> 
> 发件人: Zhigang Gong
> 发送时间: 2015-02-12 17:14:36
> 收件人: Song, Ruiling
> 抄送: beignet at lists.freedesktop.org; 彭席汿peng_xihan at dahuatech.com>
> 主题: Re: [Beignet] a question about default optimize option when building
> 
> Some additional analysis based on ruiling's comment.
> 
> The second load from p(to calculate res2) may or may not be issued.
> It depends on whether there are some side effect instructions between
> res1 and res2's assignment. For example, if there is a store instruction
> or there is a barrier, the second load will be issued and you will see
> two loads for the same pointer in the final instruction stream.
> 
> As to the a * b + c*d, it will always be optimized and be reused when
> calculate for res2 which means at the res2 assignment it will only
> generate one add instruction to add the 1 to the previous calculated
> value.
> 
> On Thu, Feb 12, 2015 at 08:56:57AM +0000, Song, Ruiling wrote:
> > It should not read global memory again. We already enable such kind of optimization pass in LLVM.
> > And (a*b+c*d) should not calculate again. This is common-subexpression. Clang should do it easily. But I am not quite sure whether clang is affected by -O2 or -O0. Anyone know details?
> > 
> > To check specific kernel. You may need to ‘export OCL_OUTPUT_LLVM_AFTER_GEN=1’ and build your program again to get the LLVM IR.
> > 
> > From: Beignet [mailto:beignet-bounces at lists.freedesktop.org] On Behalf Of 彭席汉
> > Sent: Thursday, February 12, 2015 4:40 PM
> > To: beignet at lists.freedesktop.org
> > Subject: [Beignet] a question about default optimize option when building
> > 
> > Hi:
> > 
> > My CL kernel program looks like as follow:
> > 
> > __global unsigned char *p;
> > int a, b, c, d;
> > 
> > res1 = *p * (a*b + c*d);
> > 
> >  <some code here >
> > 
> > res2 = *p * (a*b + c*d + 1);
> > 
> > 
> > If I use default build option, for res2, what will EU do? read global memory for pointer p again and do computing of "a*b + c*d" again?
> 
> > _______________________________________________
> > Beignet mailing list
> > Beignet at lists.freedesktop.org
> > http://lists.freedesktop.org/mailman/listinfo/beignet
> 
> _______________________________________________
> Beignet mailing list
> Beignet at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/beignet
> = = = = = = = = = = = = = = = = = = = =
> 
>         致
> 礼!
>      
> 
>            
>                 2015-02-12
> ****************************************************************************************
>    
>    公司名称:浙江大华技术股份有限公司
>    ZheJiang Dahua Technology CO.,LTD.
>    地址:杭州滨江区滨安路1199号
>    部门:存储产品线-NVR产品线
>    手机:18969076807
>    邮政编码:310053
>    E-mail: peng_xihan at dahuatech.com
>    Http: //www.dahuatech.com
> 
> ******************************************************************************************




More information about the Beignet mailing list