On Tue, 12 Jan 2021, Qing Zhao wrote:

> Hi, 
> 
> Just check in to see whether you have any comments and suggestions on this:
> 
> FYI, I have been continue with Approach D implementation since last week:
> 
> D. Adding  calls to .DEFFERED_INIT during gimplification, expand the 
> .DEFFERED_INIT during expand to
> real initialization. Adjusting uninitialized pass with the new refs with 
> “.DEFFERED_INIT”.
> 
> For the remaining work of Approach D:
> 
>  ** complete the implementation of -ftrivial-auto-var-init=pattern;
>  ** complete the implementation of uninitialized warnings maintenance work 
> for D. 
> 
> I have completed the uninitialized warnings maintenance work for D.
> And finished partial of the -ftrivial-auto-var-init=pattern implementation. 
> 
> The following are remaining work of Approach D:
> 
>    ** -ftrivial-auto-var-init=pattern for VLA;
>    **add a new attribute for variable:
> __attribute((uninitialized)
> the marked variable is uninitialized intentionaly for performance purpose.
>    ** adding complete testing cases;
>   
> 
> Please let me know if you have any objection on my current decision on 
> implementing approach D. 

Did you do any analysis on how stack usage and code size are changed 
with approach D?  How does compile-time behave (we could gobble up
lots of .DEFERRED_INIT calls I guess)?

Richard.

> Thanks a lot for your help.
> 
> Qing
> 
> 
> > On Jan 5, 2021, at 1:05 PM, Qing Zhao via Gcc-patches 
> > <gcc-patches@gcc.gnu.org> wrote:
> > 
> > Hi,
> > 
> > This is an update for our previous discussion. 
> > 
> > 1. I implemented the following two different implementations in the latest 
> > upstream gcc:
> > 
> > A. Adding real initialization during gimplification, not maintain the 
> > uninitialized warnings.
> > 
> > D. Adding  calls to .DEFFERED_INIT during gimplification, expand the 
> > .DEFFERED_INIT during expand to
> > real initialization. Adjusting uninitialized pass with the new refs with 
> > “.DEFFERED_INIT”.
> > 
> > Note, in this initial implementation,
> >     ** I ONLY implement -ftrivial-auto-var-init=zero, the implementation of 
> > -ftrivial-auto-var-init=pattern 
> >        is not done yet.  Therefore, the performance data is only about 
> > -ftrivial-auto-var-init=zero. 
> > 
> >     ** I added an temporary  option -fauto-var-init-approach=A|B|C|D  to 
> > choose implementation A or D for 
> >        runtime performance study.
> >     ** I didn’t finish the uninitialized warnings maintenance work for D. 
> > (That might take more time than I expected). 
> > 
> > 2. I collected runtime data for CPU2017 on a x86 machine with this new gcc 
> > for the following 3 cases:
> > 
> > no: default. (-g -O2 -march=native )
> > A:  default +  -ftrivial-auto-var-init=zero -fauto-var-init-approach=A 
> > D:  default +  -ftrivial-auto-var-init=zero -fauto-var-init-approach=D 
> > 
> > And then compute the slowdown data for both A and D as following:
> > 
> > benchmarks          A / no  D /no
> > 
> > 500.perlbench_r     1.25%   1.25%
> > 502.gcc_r           0.68%   1.80%
> > 505.mcf_r           0.68%   0.14%
> > 520.omnetpp_r       4.83%   4.68%
> > 523.xalancbmk_r     0.18%   1.96%
> > 525.x264_r          1.55%   2.07%
> > 531.deepsjeng_      11.57%  11.85%
> > 541.leela_r         0.64%   0.80%
> > 557.xz_                      -0.41% -0.41%
> > 
> > 507.cactuBSSN_r     0.44%   0.44%
> > 508.namd_r          0.34%   0.34%
> > 510.parest_r                0.17%   0.25%
> > 511.povray_r                56.57%  57.27%
> > 519.lbm_r           0.00%   0.00%
> > 521.wrf_r                    -0.28% -0.37%
> > 526.blender_r               16.96%  17.71%
> > 527.cam4_r          0.70%   0.53%
> > 538.imagick_r               2.40%   2.40%
> > 544.nab_r           0.00%   -0.65%
> > 
> > avg                         5.17%   5.37%
> > 
> > From the above data, we can see that in general, the runtime performance 
> > slowdown for 
> > implementation A and D are similar for individual benchmarks.
> > 
> > There are several benchmarks that have significant slowdown with the new 
> > added initialization for both
> > A and D, for example, 511.povray_r, 526.blender_, and 531.deepsjeng_r, I 
> > will try to study a little bit
> > more on what kind of new initializations introduced such slowdown. 
> > 
> > From the current study so far, I think that approach D should be good 
> > enough for our final implementation. 
> > So, I will try to finish approach D with the following remaining work
> > 
> >      ** complete the implementation of -ftrivial-auto-var-init=pattern;
> >      ** complete the implementation of uninitialized warnings maintenance 
> > work for D. 
> > 
> > 
> > Let me know if you have any comments and suggestions on my current and 
> > future work.
> > 
> > Thanks a lot for your help.
> > 
> > Qing
> > 
> >> On Dec 9, 2020, at 10:18 AM, Qing Zhao via Gcc-patches 
> >> <gcc-patches@gcc.gnu.org> wrote:
> >> 
> >> The following are the approaches I will implement and compare:
> >> 
> >> Our final goal is to keep the uninitialized warning and minimize the 
> >> run-time performance cost.
> >> 
> >> A. Adding real initialization during gimplification, not maintain the 
> >> uninitialized warnings.
> >> B. Adding real initialization during gimplification, marking them with 
> >> “artificial_init”. 
> >>    Adjusting uninitialized pass, maintaining the annotation, making sure 
> >> the real init not
> >>    Deleted from the fake init. 
> >> C.  Marking the DECL for an uninitialized auto variable as 
> >> “no_explicit_init” during gimplification,
> >>     maintain this “no_explicit_init” bit till after 
> >> pass_late_warn_uninitialized, or till pass_expand, 
> >>     add real initialization for all DECLs that are marked with 
> >> “no_explicit_init”.
> >> D. Adding .DEFFERED_INIT during gimplification, expand the .DEFFERED_INIT 
> >> during expand to
> >>    real initialization. Adjusting uninitialized pass with the new refs 
> >> with “.DEFFERED_INIT”.
> >> 
> >> 
> >> In the above, approach A will be the one that have the minimum run-time 
> >> cost, will be the base for the performance
> >> comparison. 
> >> 
> >> I will implement approach D then, this one is expected to have the most 
> >> run-time overhead among the above list, but
> >> Implementation should be the cleanest among B, C, D. Let’s see how much 
> >> more performance overhead this approach
> >> will be. If the data is good, maybe we can avoid the effort to implement 
> >> B, and C. 
> >> 
> >> If the performance of D is not good, I will implement B or C at that time.
> >> 
> >> Let me know if you have any comment or suggestions.
> >> 
> >> Thanks.
> >> 
> >> Qing
> > 
> 
> 

-- 
Richard Biener <rguent...@suse.de>
SUSE Software Solutions Germany GmbH, Maxfeldstrasse 5, 90409 Nuernberg,
Germany; GF: Felix Imendörffer; HRB 36809 (AG Nuernberg)

Reply via email to