Author: tlinnet Date: Wed Aug 27 11:49:21 2014 New Revision: 25331 URL: http://svn.gna.org/viewcvs/relax?rev=25331&view=rev Log: Modified profiling script to calculate timings. The timings for C-code are: Simplex, with constraints = 2.192 Simplex, without constraints = 0.216 BFGS, without constraints = 0.079 Newton, without constraints = 0.031 This is pretty pretty fast. To this profiling script, I would also now add some verification on calculations. Profile, with constraints, C code, Simplex Wed Aug 27 11:45:16 2014 /var/folders/ww/1jkhkh315x57jglgxnr9g24w0000gp/T/tmpvJSNrB 724946 function calls (723444 primitive calls) in 2.192 seconds Ordered by: cumulative time List reduced from 307 to 1 due to restriction <1> ncalls tottime percall cumtime percall filename:lineno(function) 1 0.000 0.000 2.192 2.192 profiling_relax_fit.py:314(verify) Verify, without constraints, C code, Simplex Wed Aug 27 11:45:16 2014 /var/folders/ww/1jkhkh315x57jglgxnr9g24w0000gp/T/tmphJ9GV3 76042 function calls (74654 primitive calls) in 0.216 seconds Ordered by: cumulative time List reduced from 132 to 1 due to restriction <1> ncalls tottime percall cumtime percall filename:lineno(function) 1 0.000 0.000 0.216 0.216 profiling_relax_fit.py:314(verify) Verify, without constraints, C code BFGS Wed Aug 27 11:45:16 2014 /var/folders/ww/1jkhkh315x57jglgxnr9g24w0000gp/T/tmp78MZjS 25618 function calls (24230 primitive calls) in 0.079 seconds Ordered by: cumulative time List reduced from 153 to 1 due to restriction <1> ncalls tottime percall cumtime percall filename:lineno(function) 1 0.000 0.000 0.079 0.079 profiling_relax_fit.py:314(verify) Verify, without constraints, C code Newton Wed Aug 27 11:45:16 2014 /var/folders/ww/1jkhkh315x57jglgxnr9g24w0000gp/T/tmp2IPgFC 14572 function calls (13184 primitive calls) in 0.031 seconds Ordered by: cumulative time List reduced from 169 to 1 due to restriction <1> ncalls tottime percall cumtime percall filename:lineno(function) 1 0.000 0.000 0.031 0.031 profiling_relax_fit.py:314(verify) Verify, with constraints, Python, Simplex Wed Aug 27 11:45:20 2014 /var/folders/ww/1jkhkh315x57jglgxnr9g24w0000gp/T/tmpQUUY4L 808444 function calls (806942 primitive calls) in 3.108 seconds Ordered by: cumulative time List reduced from 141 to 1 due to restriction <1> ncalls tottime percall cumtime percall filename:lineno(function) 1 0.000 0.000 3.108 3.108 profiling_relax_fit.py:353(verify_pyt) Verify, without constraints, Python, Simplex Wed Aug 27 11:45:20 2014 /var/folders/ww/1jkhkh315x57jglgxnr9g24w0000gp/T/tmp3nFBTq 87492 function calls (86104 primitive calls) in 0.320 seconds Ordered by: cumulative time List reduced from 131 to 1 due to restriction <1> ncalls tottime percall cumtime percall filename:lineno(function) 1 0.000 0.000 0.320 0.320 profiling_relax_fit.py:353(verify_pyt) Verify, without constraints, Python Scipy Wed Aug 27 11:45:20 2014 /var/folders/ww/1jkhkh315x57jglgxnr9g24w0000gp/T/tmpo1HoWn 6600 function calls (5212 primitive calls) in 0.020 seconds Ordered by: cumulative time List reduced from 137 to 1 due to restriction <1> ncalls tottime percall cumtime percall filename:lineno(function) 1 0.000 0.000 0.020 0.020 profiling_relax_fit.py:388(verify_sci) task #7822(https://gna.org/task/index.php?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting. Modified: trunk/test_suite/shared_data/curve_fitting/profiling/profiling_relax_fit.py Modified: trunk/test_suite/shared_data/curve_fitting/profiling/profiling_relax_fit.py URL: http://svn.gna.org/viewcvs/relax/trunk/test_suite/shared_data/curve_fitting/profiling/profiling_relax_fit.py?rev=25331&r1=25330&r2=25331&view=diff ============================================================================== --- trunk/test_suite/shared_data/curve_fitting/profiling/profiling_relax_fit.py (original) +++ trunk/test_suite/shared_data/curve_fitting/profiling/profiling_relax_fit.py Wed Aug 27 11:49:21 2014 @@ -57,7 +57,8 @@ # relax module imports. from status import Status; status = Status() from specific_analyses.relax_disp.estimate_r2eff import minimise_leastsq, Exp -from target_functions.relax_fit import setup, func, dfunc, d2func, back_calc_I +from specific_analyses.relax_fit.optimisation import func_wrapper, dfunc_wrapper, d2func_wrapper +from target_functions.relax_fit import setup from target_functions.chi2 import chi2_rankN ## Set the min_algor. @@ -114,7 +115,7 @@ print("C_cT=%1.1e C_cF=%1.1e P_cT=%1.1e P_cF=%1.1e" % (chi_v_cT-chi_v_cT, chi_v_cF-chi_v_cT, chi_v_pyt_cT-chi_v_cT, chi_v_pyt_cF-chi_v_cT) ) # Do verification for Python code, and difference between minfx and Scipy optimisation without constraints. - if True: + if False: # Calculate with Python code. # Calculate without contraints. v_pyt_cF_chi2_list = array(verify_pyt(constraints=False)) @@ -132,10 +133,12 @@ print("P_cF=%1.1e Sci_cF=%1.1e" % (chi_v_pyt_cF-chi_v_pyt_cF, chi_v_pyt_cF-chi_v_sci_cF) ) # Do profiling. - if True: - ################# - print("Verify, with constraints, C code") + print("\n################################# Profiling #################################") + + + ################# + print("#####################\nProfile, with constraints, C code, Simplex \n#####################") constraints = True # Print statistics. @@ -148,9 +151,8 @@ print_report(filename=filename, verbose=verbose) - if True: - ################# - print("Verify, without constraints, C code") + ################# + print("#####################\n Verify, without constraints, C code, Simplex \n#####################") constraints = False # Print statistics. @@ -163,9 +165,8 @@ print_report(filename=filename, verbose=verbose) - if True: - ################# - print("Verify, without constraints, C code BFGS") + ################# + print("#####################\n Verify, without constraints, C code BFGS \n#####################") constraints = False # Print statistics. @@ -178,9 +179,24 @@ print_report(filename=filename, verbose=verbose) - if False: - ################# - print("Verify, with constraints, Python") + + ################# + print("#####################\n Verify, without constraints, C code Newton \n#####################") + constraints = False + + # Print statistics. + verbose = True + + # Calc for verify with constraints. + filename = tempfile.NamedTemporaryFile(delete=False).name + # Profile for a single spin. + cProfile.run('verify(min_algor="Newton", constraints=%s)'%(constraints), filename) + + print_report(filename=filename, verbose=verbose) + + + ################# + print("#####################\n Verify, with constraints, Python, Simplex \n#####################") constraints = True # Print statistics. @@ -193,9 +209,8 @@ print_report(filename=filename, verbose=verbose) - if False: - ################# - print("Verify, without constraints, Python") + ################# + print("#####################\n Verify, without constraints, Python, Simplex \n#####################") constraints = False # Print statistics. @@ -208,9 +223,8 @@ print_report(filename=filename, verbose=verbose) - if True: - ################# - print("Verify, without constraints, Python Scipy") + ################# + print("#####################\n Verify, without constraints, Python Scipy \n#####################") # Print statistics. verbose = True @@ -316,6 +330,11 @@ E.set_settings_minfx(min_algor=min_algor, constraints=constraints) + # Define func. + func = func_wrapper + dfunc = dfunc_wrapper + d2func = d2func_wrapper + # Initialise the function to minimise. scaling_list = [1.0, 1.0] setup(num_params=len(x0), num_times=len(E.times), values=E.values, sd=E.errors, relax_times=E.times, scaling_matrix=scaling_list) @@ -353,6 +372,7 @@ # Define func. func = E.func_exp dfunc = E.func_exp_grad + d2func = None results = generic_minimise(func=func, dfunc=dfunc, d2func=d2func, args=(), x0=x0, min_algor=E.min_algor, min_options=E.min_options, func_tol=E.func_tol, grad_tol=E.grad_tol, maxiter=E.max_iterations, A=E.A, b=E.b, full_output=True, print_flag=E.verbosity)