Как я могу скопировать пошаговую матрицу в BLAS? - PullRequest
1 голос
/ 27 апреля 2019

Матрица уровня 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.

1 Ответ

1 голос
/ 29 апреля 2019

Пожалуйста, посмотрите на эту документацию:

http://www.netlib.org/lapack/explore-3.1.1-html/slacpy.f.html

SLACPY( UPLO, M, N, A, LDA, B, LDB )

Вышесказанное будет делать то, что вы хотите для реальных матриц одинарной точности, например, из всей или части A в B. Его использование довольно прямолинейно. Конечно, вы найдете реализации для всех ароматов D, C, Z

...