Can one profile the systemtests ?

Best
Troels


2014-06-13 10:56 GMT+02:00 Edward d'Auvergne <[email protected]>:

> For me the system tests are not much faster compared to trunk.  Now at
> r23912, the disp_spin_speed branch takes ~216 seconds for all
> Relax_disp system tests.  But for the trunk it is ~233 seconds.  From
> your profiling script it's pretty clear though that there are insane
> speed ups happening, but it's not reflected so much in the system
> tests.  It might be interesting to see what is causing these system
> tests to take so long - it's clear that it's not the target functions.
>
> Regards,
>
> Edward
>
>
> On 13 June 2014 10:46, Troels Emtekær Linnet <[email protected]>
> wrote:
> > Yeahaa!
> >
> > I realised, that if I wanted to have the systemtests go faster,
> > I should kill this one.
> >
> > It is nice to see, that systemtest suite just runs faster and faster, the
> > more models
> > i kill.
> >
> >
> >
> > 2014-06-13 10:37 GMT+02:00 Edward d'Auvergne <[email protected]>:
> >>
> >> Now this code might be too fast for the user - they may not be fast
> >> enough to even see it in the log files ;)
> >>
> >> Regards,
> >>
> >> Edward
> >>
> >>
> >> On 13 June 2014 10:10,  <[email protected]> wrote:
> >> > Author: tlinnet
> >> > Date: Fri Jun 13 10:10:04 2014
> >> > New Revision: 23908
> >> >
> >> > URL: http://svn.gna.org/viewcvs/relax?rev=23908&view=rev
> >> > Log:
> >> > Made the NOREX model af faster numpy array calculation.
> >> >
> >> > Task #7807 (https://gna.org/task/index.php?7807): Speed-up of
> dispersion
> >> > models for Clustered analysis.
> >> >
> >> > Modified:
> >> >     branches/disp_spin_speed/target_functions/relax_disp.py
> >> >
> >> > Modified: branches/disp_spin_speed/target_functions/relax_disp.py
> >> > URL:
> >> >
> http://svn.gna.org/viewcvs/relax/branches/disp_spin_speed/target_functions/relax_disp.py?rev=23908&r1=23907&r2=23908&view=diff
> >> >
> >> >
> ==============================================================================
> >> > --- branches/disp_spin_speed/target_functions/relax_disp.py
> >> > (original)
> >> > +++ branches/disp_spin_speed/target_functions/relax_disp.py     Fri
> Jun
> >> > 13 10:10:04 2014
> >> > @@ -394,8 +394,11 @@
> >> >          if model == MODEL_NS_MMQ_3SITE_LINEAR:
> >> >              self.func = self.func_ns_mmq_3site_linear
> >> >
> >> > +
> >> >          # Setup special numpy array structures, for higher
> dimensional
> >> > computation.
> >> > -        if model in [MODEL_B14, MODEL_B14_FULL, MODEL_CR72,
> >> > MODEL_CR72_FULL, MODEL_DPL94, MODEL_TAP03, MODEL_TP02, MODEL_TSMFK01]:
> >> > +        test_models = [MODEL_B14, MODEL_B14_FULL, MODEL_CR72,
> >> > MODEL_CR72_FULL, MODEL_DPL94, MODEL_TAP03, MODEL_TP02, MODEL_TSMFK01]
> >> > +
> >> > +        if model in test_models + [MODEL_NOREX]:
> >> >              # Get the shape of back_calc structure.
> >> >              # If using just one field, or having the same number of
> >> > dispersion points, the shape would extend to that number.
> >> >              # Shape has to be: [ei][si][mi][oi].
> >> > @@ -443,8 +446,11 @@
> >> >              self.r20b_struct = deepcopy(zeros_a)
> >> >              self.dw_struct = deepcopy(zeros_a)
> >> >
> >> > -            # Extract the frequencies to numpy array.
> >> > -            self.frqs_a = multiply.outer(
> >> > asarray(self.frqs).reshape(self.NE, self.NS, self.NM),
> self.no_nd_struct )
> >> > +        # Setup special numpy array structures, for higher
> dimensional
> >> > computation.
> >> > +        if model in test_models + [MODEL_NOREX]:
> >> > +            if model in test_models:
> >> > +                # Extract the frequencies to numpy array.
> >> > +                self.frqs_a = multiply.outer(
> >> > asarray(self.frqs).reshape(self.NE, self.NS, self.NM),
> self.no_nd_struct )
> >> >
> >> >              if model in MODEL_LIST_CPMG_FULL:
> >> >                  self.cpmg_frqs_a = deepcopy(ones_a)
> >> > @@ -476,7 +482,7 @@
> >> >                              # Extract number of dispersion points.
> >> >                              num_disp_points =
> >> > self.num_disp_points[ei][si][mi][oi]
> >> >
> >> > -                            if model in MODEL_LIST_CPMG_FULL:
> >> > +                            if model in MODEL_LIST_CPMG_FULL and
> model
> >> > != MODEL_NOREX:
> >> >                                  # Extract cpmg_frqs and
> num_disp_points
> >> > from lists.
> >> >
> >> > self.cpmg_frqs_a[ei][si][mi][oi][:num_disp_points] =
> >> > self.cpmg_frqs[ei][mi][oi]
> >> >
> >> > self.num_disp_points_a[ei][si][mi][oi][:num_disp_points] =
> >> > self.num_disp_points[ei][si][mi][oi]
> >> > @@ -497,7 +503,7 @@
> >> >                                      self.power_a[ei][si][mi][oi][di]
> =
> >> > int(round(self.cpmg_frqs[ei][mi][0][di] * self.relax_times[ei][mi]))
> >> >
>  self.tau_cpmg_a[ei][si][mi][oi][di]
> >> > = 0.25 / self.cpmg_frqs[ei][mi][0][di]
> >> >                                  # For R1rho data.
> >> > -                                if model in MODEL_LIST_R1RHO_FULL:
> >> > +                                if model in MODEL_LIST_R1RHO_FULL and
> >> > model != MODEL_NOREX:
> >> >
> >> > self.disp_struct[ei][si][mi][oi][di] = 1.0
> >> >
> >> >                                      # Extract the frequencies to
> numpy
> >> > array.
> >> > @@ -511,11 +517,12 @@
> >> >                                      else:
> >> >
> >> > self.num_disp_points_a[ei][si][mi][oi][di] = 0
> >> >
> >> > +            if model in test_models:
> >> > +                # Pre calculate frqs structure
> >> > +                self.frqs_struct = self.frqs_a * self.disp_struct
> >> > +
> >> >              # Make copy of values structure.
> >> >              self.back_calc_a = deepcopy(self.values_a)
> >> > -
> >> > -            # Pre calculate frqs structure
> >> > -            self.frqs_struct = self.frqs_a * self.disp_struct
> >> >
> >> >              # Find the numpy mask, which tells where values should be
> >> > replaced.
> >> >              self.mask_replace_blank = masked_equal(missing_a, 1.0)
> >> > @@ -1465,34 +1472,16 @@
> >> >          # Unpack the parameter values.
> >> >          R20 = params
> >> >
> >> > -        # Initialise.
> >> > -        chi2_sum = 0.0
> >> > -
> >> > -        # Loop over the experiment types.
> >> > -        for ei in range(self.num_exp):
> >> > -            # Loop over the spins.
> >> > -            for si in range(self.num_spins):
> >> > -                # Loop over the spectrometer frequencies.
> >> > -                for mi in range(self.num_frq):
> >> > -                    # The R20 index.
> >> > -                    r20_index = mi + si*self.num_frq
> >> > -
> >> > -                    # Loop over the offsets.
> >> > -                    for oi in range(self.num_offsets[ei][si][mi]):
> >> > -                        # The R2eff values as R20 values.
> >> > -                        for di in
> >> > range(self.num_disp_points[ei][si][mi][oi]):
> >> > -                            self.back_calc[ei][si][mi][oi][di] =
> >> > R20[r20_index]
> >> > -
> >> > -                        # For all missing data points, set the
> >> > back-calculated value to the measured values so that it has no effect
> on the
> >> > chi-squared value.
> >> > -                        for di in
> >> > range(self.num_disp_points[ei][si][mi][oi]):
> >> > -                            if self.missing[ei][si][mi][oi][di]:
> >> > -                                self.back_calc[ei][si][mi][oi][di] =
> >> > self.values[ei][si][mi][oi][di]
> >> > -
> >> > -                        # Calculate and return the chi-squared value.
> >> > -                        chi2_sum += chi2(self.values[ei][si][mi][oi],
> >> > self.back_calc[ei][si][mi][oi], self.errors[ei][si][mi][oi])
> >> > +        # Reshape R20 to per experiment, spin and frequency.
> >> > +        self.back_calc_a[:] = multiply.outer( R20.reshape(self.NE,
> >> > self.NS, self.NM), self.no_nd_struct )
> >> > +
> >> > +        ## For all missing data points, set the back-calculated value
> >> > to the measured values so that it has no effect on the chi-squared
> value.
> >> > +        if self.has_missing:
> >> > +            # Replace with values.
> >> > +            self.back_calc_a[self.mask_replace_blank.mask] =
> >> > self.values_a[self.mask_replace_blank.mask]
> >> >
> >> >          # Return the total chi-squared value.
> >> > -        return chi2_sum
> >> > +        return chi2_rankN(self.values_a, self.back_calc_a,
> >> > self.errors_a)
> >> >
> >> >
> >> >      def func_ns_cpmg_2site_3D(self, params):
> >> >
> >> >
> >> > _______________________________________________
> >> > relax (http://www.nmr-relax.com)
> >> >
> >> > This is the relax-commits mailing list
> >> > [email protected]
> >> >
> >> > To unsubscribe from this list, get a password
> >> > reminder, or change your subscription options,
> >> > visit the list information page at
> >> > https://mail.gna.org/listinfo/relax-commits
> >>
> >> _______________________________________________
> >> relax (http://www.nmr-relax.com)
> >>
> >> This is the relax-devel mailing list
> >> [email protected]
> >>
> >>
> >> To unsubscribe from this list, get a password
> >> reminder, or change your subscription options,
> >> visit the list information page at
> >> https://mail.gna.org/listinfo/relax-devel
> >
> >
>
_______________________________________________
relax (http://www.nmr-relax.com)

This is the relax-devel mailing list
[email protected]

To unsubscribe from this list, get a password
reminder, or change your subscription options,
visit the list information page at
https://mail.gna.org/listinfo/relax-devel

Reply via email to