Spinach vs spynach: maz_noesy_2 (CPU)
run maz_noesy_2-numba, both sides present. Built by comparison/report.py; protocol in comparison/README.md.
Provenance
spinach
| run date (UTC) | 2026-10-14T17:53:22Z |
|---|---|
| Spinach version | 2.13 |
| commit | 03a88b7e912ffbb3122dd24829cc5d216209c804 |
| local modifications | False |
| MATLAB | 26.2.0.3386108 (R2026b) |
| host | MacBook-Pro-8.local |
| platform | MACA64 |
| cores | 12 |
| BLAS | Apple Accelerate BLAS (ILP64) |
| computational threads | 12 |
| parallel pool workers | 11 |
| GPU requested | False |
| GPU device | |
| case options | {"gpu": false} |
spynach
| run date (UTC) | 2026-10-26T13:28:56Z |
|---|---|
| spynach version | v0.2.0-21-g2e8843c-dirty |
| commit | 2e8843cd088ebc17faf75fd8d06a6692f8507f71 |
| local modifications | True |
| Python | 3.12.5 |
| NumPy | 2.5.4 |
| SciPy | 1.18.1 |
| Numba (compiled kernels) | 0.68.0 |
| host | jerschowlab25.chem.nyu.edu |
| platform | macOS-26.6.2-arm64-arm-64bit |
| cores | 12 |
| BLAS | {"numpy": "accelerate", "scipy": "Accelerate"} |
| thread settings | library defaults |
| GPU requested | False |
| GPU device | |
| case options | {} |
| not run |
Timings
| stage | Spinach / s | spynach / s | spynach / Spinach |
|---|---|---|---|
| create | 1.26 | 0.00 | 0.00x |
| basis | 3.73 | 0.04 | 0.01x |
| liquid/noesy | 840.81 | 281.95 | 0.34x |
| processing | 0.01 | 0.01 | 0.98x |
| plot | 0.15 | 0.04 | 0.24x |
| total (wall clock) | 846.15 | 282.04 | 0.33x |
Data
| variable | Spinach shape | spynach shape | relative error | max |difference| | |
|---|---|---|---|---|---|
| fid_cos | (256, 256) | (256, 256) | 1.134e-13 | 4.909e-14 | |
| fid_sin | (256, 256) | (256, 256) | 1.235e-13 | 4.518e-14 | |
| spectrum | (1024, 1024) | (1024, 1024) | 1.098e-13 | 2.850e-10 |
relative error = ||spynach - Spinach||F / ||Spinach||F, the metric of the oracle tests.
Figures
spinach: noesy
Profiles
spinach
by self time
| function | calls | self / s | total / s |
|---|---|---|---|
| propagator | 9 | 719.49 | 741.10 |
| expmint | 1 | 56.47 | 796.74 |
| clean_up | 361 | 21.80 | 21.80 |
| ParforEngine>ParforEngine.getCompleteIntervals | 306 | 17.06 | 17.45 |
| evolution>(parfor body) | 48 | 8.61 | 9.60 |
| CJSKeyValueStore>iWriteDataFile | 124 | 2.78 | 2.78 |
| CJSKeyValueStore>iReadDataFile | 31 | 2.64 | 2.64 |
| redfield_integral_async | 1 | 2.27 | 14.83 |
| ParforEngine>ParforEngine.addInterval | 966 | 1.81 | 1.96 |
| cheap_norm | 819 | 1.54 | 1.55 |
| CJSKeyValueStore>CJSKeyValueStore.getSingleVariable | 31 | 1.54 | 4.25 |
| cell2mat>concatenateCellContents | 25 | 1.51 | 1.51 |
| hamiltonian | 4 | 1.49 | 5.51 |
| CJSKeyValueStore>CJSKeyValueStore.putSingleVariable | 124 | 1.08 | 3.94 |
| existentials | 1 | 0.78 | 0.78 |
| corrfun | 661 | 0.36 | 0.41 |
| step>reordered_taylor | 77 | 0.30 | 0.30 |
| AbstractClusterPool.AbstractClusterPool>AbstractClusterPool.get.ValueStore | 32 | 0.27 | 0.30 |
| report | 1544 | 0.24 | 0.28 |
| relaxation | 2 | 0.21 | 817.35 |
| CJSKeyValueStore>@(key)obj.KeyFileStore.remove(key) | 31 | 0.16 | 0.16 |
| step>(parfor body) | 936 | 0.14 | 0.17 |
| parallel_function>distributed_execution | 43 | 0.14 | 20.15 |
| ParforEngine>ParforEngine.buildParforController | 43 | 0.12 | 0.16 |
| step | 85 | 0.10 | 10.19 |
by total time (with callees)
| function | calls | self / s | total / s |
|---|---|---|---|
| run | 1 | 0.00 | 846.16 |
| run_comparison | 1 | 0.06 | 846.16 |
| maz_noesy_2_spinach | 1 | 0.03 | 846.10 |
| liquid | 1 | 0.00 | 840.81 |
| relaxation | 2 | 0.21 | 817.35 |
| rlx_scalar | 1 | 0.05 | 796.80 |
| expmint | 1 | 56.47 | 796.74 |
| propagator | 9 | 719.49 | 741.10 |
| parallel_function | 51 | 0.02 | 30.02 |
| noesy | 1 | 0.01 | 22.98 |
| clean_up | 361 | 21.80 | 21.80 |
| parallel_function>distributed_execution | 43 | 0.14 | 20.15 |
| ParforEngine>ParforEngine.getCompleteIntervals | 306 | 17.06 | 17.45 |
| redfield_integral_async | 1 | 2.27 | 14.83 |
| evolution | 12 | 0.07 | 12.86 |
| step | 85 | 0.10 | 10.19 |
| evolution>(parfor body) | 48 | 8.61 | 9.60 |
| hamiltonian | 4 | 1.49 | 5.51 |
| ValueStore>ValueStore.get | 31 | 0.01 | 4.27 |
| CJSKeyValueStore>CJSKeyValueStore.getVariable | 31 | 0.01 | 4.26 |
| CJSKeyValueStore>@(key)obj.getSingleVariable(key) | 31 | 0.00 | 4.25 |
| CJSKeyValueStore>CJSKeyValueStore.getSingleVariable | 31 | 1.54 | 4.25 |
| ValueStore>ValueStore.put | 31 | 0.05 | 4.03 |
| CJSKeyValueStore>CJSKeyValueStore.putVariable | 31 | 0.01 | 3.95 |
| CJSKeyValueStore>CJSKeyValueStore.putSingleVariable | 124 | 1.08 | 3.94 |
spynach
by self time
| function | calls | self / s | total / s |
|---|---|---|---|
| <lambda> (kernels.py:278) | 16464 | 250.96 | 0.57 |
| csr_times_dense (kernels.py:297) | 3968 | 8.87 | 8.88 |
| taylor_term (kernels.py:315) | 934 | 5.00 | 5.00 |
| <built-in method numpy._core._multiarray_umath.count_nonzero> | 3639 | 3.09 | 3.09 |
| <built-in method scipy.sparse._sparsetools.csr_sort_indices> | 420 | 2.15 | 2.15 |
| spgemm_round (kernels.py:246) | 821 | 1.73 | 254.48 |
| <built-in method scipy.sparse._sparsetools.csr_matmat> | 843 | 1.67 | 1.67 |
| <built-in method scipy.sparse._sparsetools.csr_matmat_maxnnz> | 843 | 1.04 | 1.04 |
| matlab_round (kernels.py:63) | 2333 | 0.80 | 0.81 |
| <built-in method scipy.sparse._sparsetools.csr_plus_csr> | 632 | 0.66 | 0.66 |
| _reordered_taylor (propagation.py:126) | 85 | 0.61 | 5.81 |
| <method 'acquire' of '_thread.lock' objects> | 93118 | 0.57 | 665.73 |
| <built-in method scipy.sparse._sparsetools.get_csr_submatrix> | 64 | 0.32 | 0.32 |
| <built-in method scipy.sparse._sparsetools.coo_tocsr> | 131 | 0.27 | 0.27 |
| _superop_side_build (operators.py:290) | 553 | 0.22 | 0.52 |
| <built-in method scipy.sparse._sparsetools.csr_eliminate_zeros> | 693 | 0.22 | 0.22 |
| spgemm_round (backend.py:83) | 821 | 0.21 | 254.70 |
| <built-in method scipy.sparse._sparsetools.csr_tocsc> | 130 | 0.18 | 0.18 |
| <method 'copy' of 'numpy.ndarray' objects> | 6382 | 0.17 | 0.17 |
| <built-in method numpy.array> | 18507 | 0.14 | 0.14 |
| step (propagation.py:78) | 85 | 0.13 | 5.99 |
| assemble (hamiltonian.py:189) | 38 | 0.11 | 1.62 |
| <method 'reduce' of 'numpy.ufunc' objects> | 43516 | 0.11 | 0.11 |
| <built-in method scipy.sparse._sparsetools.csr_sum_duplicates> | 421 | 0.10 | 0.10 |
| <method 'searchsorted' of 'numpy.ndarray' objects> | 12160 | 0.09 | 0.09 |
by total time (with callees)
| function | calls | self / s | total / s |
|---|---|---|---|
| result_iterator (_base.py:612) | 16807 | 0.04 | 1991.35 |
| _result_or_cancel (_base.py:314) | 16464 | 0.03 | 853.85 |
| <method 'acquire' of '_thread.lock' objects> | 93118 | 0.57 | 665.73 |
| join (threading.py:1117) | 4116 | 0.01 | 665.22 |
| _wait_for_tstate_lock (threading.py:1155) | 4116 | 0.00 | 665.20 |
| result (_base.py:428) | 16464 | 0.03 | 590.13 |
| run (maz_noesy_2_spynach.py:15) | 1 | 0.00 | 282.04 |
| simulate (maz_noesy_2.py:151) | 1 | 0.00 | 282.01 |
| liquid (contexts.py:32) | 1 | 0.00 | 281.95 |
| _dissipators (contexts.py:310) | 1 | 0.00 | 263.83 |
| relaxation (relaxation.py:51) | 2 | 0.03 | 263.83 |
| matmul_clean (utilities.py:62) | 885 | 0.02 | 260.52 |
| expmint (relaxation.py:213) | 32 | 0.00 | 259.09 |
| _srfk (relaxation.py:325) | 1 | 0.00 | 256.02 |
| spgemm_round (backend.py:83) | 821 | 0.21 | 254.70 |
| spgemm_round (kernels.py:246) | 821 | 1.73 | 254.48 |
| __exit__ (_base.py:646) | 343 | 0.00 | 252.53 |
| shutdown (thread.py:219) | 343 | 0.00 | 252.53 |
| _bootstrap (threading.py:1018) | 4116 | 0.01 | 252.50 |
| _bootstrap_inner (threading.py:1058) | 4116 | 0.01 | 252.50 |
| propagator (propagation.py:25) | 48 | 0.03 | 245.78 |
| wait (threading.py:323) | 19704 | 0.05 | 184.24 |
| <method 'get' of '_queue.SimpleQueue' objects> | 7846 | 0.08 | 131.96 |
| run (threading.py:1001) | 4116 | 0.01 | 131.96 |
| _worker (thread.py:69) | 4116 | 0.01 | 131.95 |
Console logs
- spinach: console.log
- spynach: console.log