On 5 June 2014 15:15, Troels Emtekær Linnet <tlinnet@xxxxxxxxxxxxx> wrote:
Hi Edward. So, I have tried to implement directly the infrastructure data format for NO * NM * NS * NE. And the speed up is 4.1x-4.5x times faster. I think that is a very nice message to the release list. It is obvious, that the largest speed-up will be gained by getting rid of the NS loop. Could one just re-shape the numpy arrays in the target function?
Yes! Ok, you will need a little more than that. The reshape will be inside the lib.dispersion modules where we have the code: back_calc[:] = R2eff This would need to be replaced with: back_calc[:] = R2eff.reshape(NE, NS, NM, NO, ND) Or maybe keep the experiments separate, i.e. don't delete that loop in target_functions.relax_disp, as different experiments are sometimes associated with different lib.dispersion models, and then use: back_calc[:] = R2eff.reshape(NS, NM, NO, ND) As in your script (http://thread.gmane.org/gmane.science.nmr.relax.devel/6022/focus=6028), you will need to increase the dimensionality of some data structures: g_ncyc = array(ncyc_list*100) So, just as you have done in your script, you calculate a large 1D array of R2eff values for all spins, all magnetic field strengths, all offsets, and all dispersion points. Difficulties might occur for cases with missing data, but that is why I have implemented a number of system tests checking what happens when data is missing :) The large speedups are not just for large spin clusters. You also have large speedups for R1rho experiments where many offsets are collected. And there is a nice speedup when you have data at 2 or 3 magnetic fields. Anyway, for testing your script can be expanded for multi-field and multi-offset cases. Or maybe make a new script for that profiling in test_suite/shared_data/dispersion/profiling/. Regards, Edward