You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Allow matmul(B.T, A.T).T to be optimized to np.matmul(A, B) #15742
Currently, our implementation of the matmul ufunc is intelligent, and is able to pass appropriate transpose flags to BLAS to handle transposed contiguous arrays.
For A, B, and C as contiguous 2D arrays, the inner loop is intelligent enough to map np.matmul(B.T, A.T, out=C.T) to np.matmul(A, B, out=C):
However when the out argument is omitted, the ufunc machinery pre-allocates out with "C" memory ordering, which is not the "F" ordering that C.T has. Ideally, we'd be able to allocate our array such that we can make o_c_blasable or o_f_blasable true as necessary.
As part of @seberg's ufunc work, it would be great if ufuncs could be involved in the output allocation machinery.
Hmm, something to keep in mind, I had not really thought of allowing hooks into the actual allocation. The default should maybe be intelligent enough to do that mapping there. I suppose it may be nontrivial, since the outer iteration order has to be first, but of course in general it can be more complicated.
Activity
seberg commentedon Mar 11, 2020
Hmm, something to keep in mind, I had not really thought of allowing hooks into the actual allocation. The default should maybe be intelligent enough to do that mapping there. I suppose it may be nontrivial, since the outer iteration order has to be first, but of course in general it can be more complicated.
eric-wieser commentedon Mar 11, 2020
Updated with a link to the existing code.