-
Notifications
You must be signed in to change notification settings - Fork 14
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Assess Superlet Performance Issues #176
Comments
So I just ran a few ad-hoc backend timing tests, and these are the results for a single 25 000 sample signal:
I see pretty perfect linear scaling 😄 |
Hm, can't reproduce this with the frontend. Using the synthetic data-set from the testing module defined in syncopy/syncopy/tests/test_specest.py Line 38 in 9af9d5a
order_min = 1 and order_max = 2 is:
for
and
|
I did a few frontend tests, so simple calls ala
ncalls tottime percall cumtime percall filename:lineno(function)
954 2.006 0.002 2.006 0.002 {built-in method scipy.fft._pocketfft.pypocketfft.c2c}
3 0.685 0.228 3.094 1.031 superlet.py:107(multiplicativeSLT)
318 0.153 0.000 0.153 0.000 superlet.py:286(time)
318 0.141 0.000 2.209 0.007 signaltools.py:334(_freq_domain_conv)
642 0.036 0.000 0.036 0.000 {built-in method numpy.zeros}
6 0.015 0.003 2.409 0.401 superlet.py:336(cwtSL)
3 0.013 0.004 0.022 0.007 dataset.py:584(__setitem__)
ncalls tottime percall cumtime percall filename:lineno(function)
1908 6.594 0.003 6.594 0.003 {built-in method scipy.fft._pocketfft.pypocketfft.c2c}
3 1.332 0.444 9.164 3.055 superlet.py:107(multiplicativeSLT)
636 0.490 0.001 0.490 0.001 superlet.py:286(time)
636 0.467 0.001 7.223 0.011 signaltools.py:334(_freq_domain_conv)
1284 0.098 0.000 0.098 0.000 {built-in method numpy.zeros}
12 0.052 0.004 7.832 0.653 superlet.py:336(cwtSL)
1908 0.029 0.000 0.120 0.000 helper.py:109(_fix_shape)
3 0.014 0.005 0.022 0.007 dataset.py:584(__setitem__)
ncalls tottime percall cumtime percall filename:lineno(function)
3816 26.142 0.007 26.142 0.007 {built-in method scipy.fft._pocketfft.pypocketfft.c2c}
3 2.665 0.888 33.175 11.058 superlet.py:107(multiplicativeSLT)
1272 1.754 0.001 28.438 0.022 signaltools.py:334(_freq_domain_conv)
1272 1.742 0.001 1.742 0.001 superlet.py:286(time)
2568 0.365 0.000 0.365 0.000 {built-in method numpy.zeros}
24 0.156 0.006 30.510 1.271 superlet.py:336(cwtSL)
3816 0.094 0.000 0.445 0.000 helper.py:109(_fix_shape)
1276 0.041 0.000 0.041 0.000 {built-in method numpy.arange}
1272 0.028 0.000 0.028 0.000 {method 'copy' of 'numpy.ndarray' objects}
1272 0.025 0.000 0.065 0.000 superlet.py:383(_get_superlet_support)
8949 0.019 0.000 0.019 0.000 {built-in method numpy.array}
1272 0.018 0.000 28.531 0.022 signaltools.py:432(fftconvolve)
5088 0.017 0.000 0.048 0.000 helper.py:41(_init_nd_shape_and_axes)
1272 0.016 0.000 0.027 0.000 signaltools.py:263(_centered)
3816 0.015 0.000 26.665 0.007 basic.py:141(c2cn)
3 0.014 0.005 0.022 0.007 dataset.py:584(__setitem__) So there is indeed some unexpected scaling, EDIT: small inspection of the profiles shows, that |
Computing a spectrum using superlets is at times significantly slower than a (comparable) wavelet setup, e.g., same data-set (3 trials, 4 channels), auto-freq selection (0-500Hz), ca. 90 seconds for
max_order = 2
superlets compared to around 8 seconds for Morlet.The increase in computational time seems non-linear wrt
max_order
too (formax_order = 10
the runtime for the same dataset is ca. 20 minutes)The text was updated successfully, but these errors were encountered: