Матрица уровня 3 BLAS / подпрограммы Matrix принимают аргументы lda
, ldb
и т. Д., Которые, насколько я понимаю, позволяют пропускать "пошаговые" матрицы.Например, если у меня есть следующая матрица с двумя столбцами 2 x 2:
|1 2|
|3 4|
|x x|
, где x - это данные, которые я хочу игнорировать, я могу представить это с помощью аргументов m = 2, n = 2, lda=3
(для основных матриц столбцов).Мой вопрос заключается в том, можно ли копировать такие матрицы с помощью процедур BLAS?
Если шаг равен размеру матрицы (т. Е. Матрица не выделена), тривиально использовать процедуру vector copy , например dcopy(m*n,A,1,B,1)
для этого. Есть ли способ сделать это, когда матричные элементы не являются смежными, т. Е. Lda / stride! = M
Один из способов сделать это - неоднократно вызывать dcopy
с увеличивающимися смещениями, сохраняя параметр incrx
равным m.Это не кажется эффективным.В качестве альтернативы dgemm
с B = I и C = 0.