问题标签 [lapacke]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
40 浏览

lapack - libatlas3、liblapacke 和 libopenblas0 如何相互交互?

我试图弄清楚 Debian 11 和 Ubuntu 20.04 中以下库包之间的交互:

  • libatlas3-base
  • 库包
  • 开放式BLAS
    • libopenblas0-openmp
    • libopenblas0-pthread
    • libopenblas0-串行

看起来 OpenBLAS 包一次只能使用一个,因为它们位于此处显示的不同子目录中。如何选择活跃的?

  • /usr/lib/x86_64-linux-gnu/openblas-openmp/libopenblas.so.0
  • /usr/lib/x86_64-linux-gnu/openblas-pthread/libopenblas.so.0
  • /usr/lib/x86_64-linux-gnu/openblas-serial/libopenblas.so.0

一旦我选择了活动的 OpenBLAS 实现,libatlas3 或 liblapacke 会使用活动的实现吗?你怎么知道他们在用什么?

0 投票
0 回答
49 浏览

c++ - 如何获取调用c接口的LAPACKE_dgesvd的左奇异向量的前n列?

我有一个 m * 3 的矩阵,其中 m >> 3,存储在行主要的一维数组 [xyzxyzxy z...] 中。我调用LAPACKE_dgesvd函数来获取矩阵的左奇异向量 U 的前 n 列,但它引发了异常。

我引用了这个页面:

英特尔 mkl 参考

这个页面提到如果我们只获取左左奇异向量的n列,我们可以让jobu为S,jobvt为N。在我的示例中,我只想获取U的前3列,所以我分配9你的数量,我这样调用函数:

此代码引发异常。我猜原因是 u 和 vt 没有分配足够的内存。我的意思是,如果我只想获取 U 的子向量,但我必须用 m * m 分配 U 的全部内存,用 n * n 分配 vt?

0 投票
0 回答
207 浏览

gpu - LAPACKE 或 MAGMA GPU - 使用 Cholesky 分解的矩阵求逆 - 函数 magma_dpotrf_gpu 和 magma_dpotri_gpu

我有一个函数的第一个版本,它反转一个大小矩阵并m使用 如下:magma_dgetrf_gpumagma_dgetri_gpu

现在,我也想使用 Cholesky 分解进行逆运算。该功能看起来像第一个版本,除了使用的功能是:

这是反转的整个函数:

不幸的是,在检查了输出数据之后,我的实现出现了错误的反转。

我对这一行的使用有疑问:

谁能一眼看出我使用dpotrfanddpotri函数(实际上是magma_dpotrf_gpuand magma_dpotri_gpu)的错误来自哪里?

编辑1:

根据 Damir Tenishev 的建议,我举了一个使用 LAPACKE 对矩阵求逆的函数示例:

如您所见,这是矩阵求逆的经典版本,它使用LAPACKE_dgetrfLAPACKE_dgetri

编辑2:版本MAGMA是:

如您所见,我使用了magma_dgetrf_gpumagma_dgetri_gpu函数。

现在,我想用LAPACKEor MAGMA+LAPACK、使用dpotrfanddpotri函数来做同样的事情。我记得我逆的矩阵是对称的。

编辑 3:我的尝试来自此文档链接

特别是,请参见magma dpotri - invert a positive definite matrix in double precision, CPU interface第 325 页的第 4.4.21 节。

0 投票
1 回答
114 浏览

c - 为什么 QR 分解不能正常工作?(Lapacke,复杂案例)

我用拉帕克。我正在尝试在 C 中对复杂数据进行 QR 分解。为此,我编写了函数(基于 Haatschii 代码How to get the Q from the QR factorization output?):

值得注意的是,Alireza 的作者也遇到了函数znugqr的问题,但他切换到函数zunmqr似乎幸福来了(LAPACK QR 分解)。我相信我的问题也与LAPACKE_zungqr矩阵 R 与其他方法相同,因此LAPACKE_zgeqrf可以成功运行。

但是最后,用 Mathematica(QRDecomposition函数)和 Python(numpy.linalg.qr函数)比较相似的结果(QR 分解),我看到矩阵 Q 是不同的,而矩阵 R 是相同的。

输入矩阵,为简单起见 5×5:

输出 Q 矩阵(来自我的 C 代码):前 3 列:

最后两列:

输出 Q 矩阵(来自 Python 代码):

(这里我只列出这个矩阵的最后 2 列。前 3 列是相同的)。

我计算了这些矩阵中各列的最大和平均差异。结论是这样的:前三列在水平上10^-11不同,后两列的差异分别是10^-3, 10^-2(肉眼可见的差异)。

随着矩阵大小的增加,观察到差异的增加,并且通常前 2-3 列很好地吻合。

也许有人可以帮助我?

0 投票
0 回答
12 浏览

multithreading - 对于带状矩阵,有没有比 LAPACKE_zgeev() 更快的替代方法?

我目前正在将 Matlab 脚本的时序与用 C 编写的脚本进行比较。其中一个主要部分是计算特征值和三对角矩阵的特征向量矩阵(稍后我将使用 9 个对角矩阵)。目前,C 实现使用 LAPACKE_zgeev()。

当使用相同的三对角矩阵时,Matlab 的 eig() 在 1 个 openmp 线程(在 C 中)下比 LAPACKE_zgeev() 高出两倍,在使用 4 个线程(在这台机器上都可用)运行时比 LAPACKE_zgeev() 高出 10%。

LAPACKE_zgeev() 有更快的替代方法吗?最好是通过带状矩阵使用较少内存的一种。