Intel® oneAPI Math Kernel Library
Ask questions and share information with other developers who use Intel® Math Kernel Library.

Help using mkl_?imatcopy

Allan_L_
Beginner
505 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?

0 Kudos
4 Replies
Dmitry_B_Intel
Employee
505 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

0 Kudos
Allan_L_
Beginner
505 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?

0 Kudos
Evarist_F_Intel
Employee
505 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 ] [ ... ]
0 Kudos
Allan_L_
Beginner
505 Views

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

0 Kudos
Reply