BLAS Level 2 带矩阵向量乘积多个向量

Posted

技术标签:

【中文标题】BLAS Level 2 带矩阵向量乘积多个向量【英文标题】:BLAS Level 2 band matrix-vector product multiple vectors 【发布时间】:2017-08-26 15:54:27 【问题描述】:

BLAS Level 2 中有一个用于带状矩阵向量积的例程,适用于一般情况和对称情况(MKL 实现的链接)。

cblas_?gbmv

cblas_?sbmv

有没有办法使用多个向量(不使用外部 for 循环),以在这种情况下最大限度地提高性能?

【问题讨论】:

当你有一个密集的完整矩阵(多个向量)时,没有办法利用一个带状结构来提高速度。 @percusse 我认为你的说法不成立。也许你误解了我的问题。我想要多个右侧向量,即 y=A*x,其中 A 是稀疏带状,x 是 N×d。您可以利用 x 中的每个向量,因为它们的结果是独立的(y 的每一列) 是的,这就是 BLAS3 没有它们的原因,因为它只是遍历 y 的每一列,因此是 BLAS2 函数。 BLAS3 使用块而不是 RHS 的列。 【参考方案1】:

我认为Spike library 对于对称情况应该有这样的例程。不过,我恐怕帮不上什么忙了,因为我从来没有用过它。

Spike 的算法和实现(用于系统求解)在[Polizzi & Sameh, Comp. Fluids (36), 2007] 中进行了概述。

【讨论】:

我将您的答案标记为正确,而不是 Picaud Vincent 的,只是因为您提供了有效的替代方案。但是,我确实相信这应该在 BLAS 实现中提供。【参考方案2】:

AFAIK 答案是否定的。

3级BLAS子程序的完整列表可以在这里找到

http://www.netlib.org/blas/#_level_3

并且没有带状矩阵子程序。


额外信息:如果您正在使用 blas/lapack 和 C++,那么最近有一个设计 C++ 接口的倡议:

http://www.netlib.org/na-digest-html/17/v17n21.html#1

(cblas 和 lapacke 更面向 C 使用)

【讨论】:

以上是关于BLAS Level 2 带矩阵向量乘积多个向量的主要内容,如果未能解决你的问题,请参考以下文章

矩阵与向量的乘积

横向量与矩阵的乘积

PyTorch 向量/矩阵/张量的元素乘积

C:矩阵向量乘积,两个双数相乘给出错误符号

详解矩阵求导法则

详解矩阵求导法则