[Beignet] a question about default optimize option when building

彭席汉 peng_xihan at dahuatech.com
Thu Feb 12 01:32:08 PST 2015


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; Åíϯ›Tpeng_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

******************************************************************************************
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/beignet/attachments/20150212/5d83fa11/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: NVRÐû´«.png
Type: application/octet-stream
Size: 188177 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/beignet/attachments/20150212/5d83fa11/attachment-0001.obj>


More information about the Beignet mailing list