Intel® oneAPI Math Kernel Library
Ask questions and share information with other developers who use Intel® Math Kernel Library.
Announcements
The Intel sign-in experience has changed to support enhanced security controls. If you sign in, click here for more information.

Help using mkl_?imatcopy

Beginner
299 Views

The mkl_?imatcopy functions require an extra leading dimension parameter, called ldb.
From the documentation, I am not sure what value it should be used for this parameter. As an answer, I would like that the following case be considered:

A = (lda = 7 for row-major)
[x x x x x x x]
[x x a b c x x]
[x x d e f x x]
[x x x x x x x]

Transposed =
[x x x x x x x]
[x x a d b x x]
[x x e c f x x]
[x x x x x x x]

What value for ldb should be used in mkl_?imatcopy?

4 Replies
Employee
299 Views

You cannot do this with mkl_?imatcopy, because elements b and e are not adjacent in the result - this permutation is not a transposition.

parameter ldb is the output stride. When you transpose M-by-N matrix you mean your input(m,n) is located at input[m*LDA+n] and your output(n,m) is located at output[n*LDB+m]

Thanks
Dima

Beginner
299 Views

Thanks Dmitry. I am in doubt now. Can I use mkl_?imatcopy on a matrix block? If not, I can only think of lda being always cols (row major order). Also, for a MxN matrix with lda = N, what would be ldb? M?

Employee
299 Views
Allan, one of the most popular imatcopy usage is imatcopy('R','T',rows,cols,1.,A,cols,rows). That is exactly what you ask about transpose entire MxN matrix (i.e. ldb=cols). But if you want to transpose a sub-block in a matrix you have to specify ldb slightly different. For example imatcopy('R', 'T', 2, 2, 1., A+6+2, 6, 6) converts A = [ x x x x x x ] [ x x a b x x ] [ x x c d x x ] [ ... ] to A` = [ x x x x x x ] [ x x a c x x ] [ x x b d x x ] [ ... ]
Beginner
299 Views

Thanks Evarist. Is there a scenario where ldb is different from lda?