There are some more contraction logic optimizations to do, following up on #25. For example:
[ ] Have ContractionProperties only store Tuples, not MVectors. MVectors can be used as temporaries in compute_perms! and compute_contraction_properties!. This should decrease allocation requirements.
[ ] Provide a way to pass just the number of output indices statically to contract!!. This will help with type stability for out-of-place contraction, since in that case the number of output indices is not known at compile time. In general, this type instability is not too bad, but for small tensor contractions it can add some overhead (I think on the order of 1 microsecond). This type instability shows up in the function contract_labels, where it outputs a Tuple of the labels of the new tensor but it is created dynamically.
There are some more contraction logic optimizations to do, following up on #25. For example:
ContractionProperties
only store Tuples, not MVectors. MVectors can be used as temporaries incompute_perms!
andcompute_contraction_properties!
. This should decrease allocation requirements.contract!!
. This will help with type stability for out-of-place contraction, since in that case the number of output indices is not known at compile time. In general, this type instability is not too bad, but for small tensor contractions it can add some overhead (I think on the order of 1 microsecond). This type instability shows up in the functioncontract_labels
, where it outputs a Tuple of the labels of the new tensor but it is created dynamically.