问题标签 [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.
c - C中的Lapacke:使用dsymm,链接器错误
**编辑,包括问题末尾的更新。
当我尝试使用 LAPACKE 中的 dsymm 时,我收到“链接器命令失败”错误。(所以,可能我编译代码错误?)这是有问题的代码:
这是我得到的错误:
matrix_multiplication_attempt.c:51:10: warning: implicit declaration of
function 'lapacke_dsymm' is invalid in C99
[-Wimplicit-function-declaration]
info=lapacke_dsymm(side, uplo,
^
1 warning generated.
Undefined symbols for architecture x86_64:
"_lapacke_dsymm", referenced from:
_main in matrix_multiplication_attempt-e2c0b9.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
我对C没有经验,所以可能有一个简单的错误。非常感谢任何见解。
编辑:谢谢你,弗朗西斯,问题是 dsymm 不是 LAPACK 的一部分,而是在 BLAS 中,你的解决方案有效。现在,我更新的问题是:如何链接 LAPACKE 以便我可以在同一个文件中同时使用 LAPACKE 和 BLAS 例程?我的编译尝试之一是:
gcc matrix_multiplication_attempt.c -o matrix_multiplication_attempt -lblas -Wall -I/usr/local/opt/lapack/include -L/usr/local/opt/lapack/lib/ -llapacke
但这给出了错误
Undefined symbols for architecture x86_64:
"_cblas_dsymm", referenced from:
_main in matrix_multiplication_attempt-76b8f6.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
lapack - CentOS 5 中的 lapacke.h
我正在尝试创建一个使用 BLAS 和 LAPACK C 扩展的 Python 轮子。在 Ubuntu 下编译此类包需要以下系统包:
libopenblas-dev
: (Open)BLAS 开发库liblapack-dev
: LAPACK 开发库liblapacke-dev
: LAPACK 的 C 标头
这很好用,但现在我需要在 CentOS 5 下重复这个过程。原因是我正在尝试创建一个 manylinux 轮子,推荐的方法似乎是使用旧的 CentOS 工具链来保证它可以在不同的 linux 发行版下工作.
问题是,虽然在 CentOS 5(libopenblas-dev
和)中有等价物,但. 考虑到这些软件包中提供的 LAPACK 版本非常旧(3.0),这似乎是有道理的,它似乎不支持 lapacke。但正因为如此,我无法编译我的软件,因为 gcc 抱怨缺少 lapacke.h 头文件。liblapack-dev
openblas-devel
lapack-devel
liblapacke-dev
我尝试过的事情:
- 手动下载和编译更新的 LAPACK 版本(3.8.0 和 3.6.0)。我得到编译错误。
- 直接将 lapacke.h 标头从上述 LAPACK 版本之一复制到 /usr/include。没用,可能是因为 LAPACK 版本的不同。
- 按照官方说明添加英特尔 MKL 存储库,并将 BLAS/LAPACK 替换为 MKL。不幸的是 CentOS 5 不包含 中的
--add-repo
选项yum-config-manager
,所以我在这里有点不知所措。
least-squares - 缓存之前调用 lapacke gelsd 的中间结果
迭代算法在每次迭代中调用 LAPACKE_sgelsd 并使用单列 B。后续调用通常使用相同的 A 矩阵。我相信一个实质性的性能改进将是缓存或在 A 矩阵没有改变的情况下重用上一次迭代的中间结果。这应该有点类似于为 B 传递多列时可能获得的收益。对吗?实施起来会有多困难,如何做到?它使用openblas。谢谢你。
c - 使用英特尔 MKL 计算 `trans(a)*inv(b)*a` 的正确方法
我正在使用英特尔的 MKL LAPACKE 和 CBLAS来计算
yn = trans(a)*inv(zt)*a + trans(b)*inv(zl)*b
其中a
和b
是 m×n 实矩阵,zt
是zl
m×m 复数矩阵。生成的复数矩阵yn
是 n×n。
这是我的做法:
实际代码:
当我运行该测试时,它给出了一个错误
它没有显示我是否评论了第 2 次和第 4 次调用zgemm
。根据我在文档中阅读的内容,参数是正确的。我尝试更改它们,但错误仍然存在,或者我收到错误参数的错误,例如:
那么,我的代码有什么问题?
c++ - 使用 dpbtrf 时出现分段错误
我尝试在 c++中使用 LAPACK 例程dpbtrf
(Documentaton ),但总是出现分段错误。我不确定如何传递矩阵LAPACKE_dpbtrf
并尝试从我发现的几个示例中复制它但没有成功。如何使下面的代码工作?
我想计算矩阵的cholesky分解
这是我尝试过的:
c++ - 如何将 OpenBlas Lapacke 与 Rcpp 一起使用
我有一些正在运行的 c++ 代码Lapacke
,使用OpenBlas
. 我想将此代码包含到 R 包中,并使用该Rcpp
包在该函数和 R 之间传输数据。但不知何故,两人似乎并不喜欢对方。一旦我有了一个源文件#include <lapacke.h>
, #include <Rcpp.h>
它就不再编译了。两者分别工作正常。据我所知,有一大堆错误消息Rcpp
已损坏(例如/home/Alex/R/x86_64-pc-linux-gnu-library/3.4/Rcpp/include/Rcpp/traits/traits.h:32:15: error: expected ‘)’ before ‘__extension__’)
.
我不知道为什么会这样。有没有办法同时使用两者?还是我应该做一些完全不同的事情?
这是一个给我错误的最小示例:
我使用创建了一个包
/li>我添加了一个
/li>.cpp
文件以/src
包含我添加了一个 Makvars 文件以
/li>/src
包含编译安装
/li>
python - 安装 slycot 后 Control.tf2ss() 出现故障
control.tf2ss() 模块在 SISO 系统上完美运行,但是一旦我安装了 slycot(这是 MIMO 系统所必需的),该函数就会返回错误(对于 SISO 和 MIMO 系统)。
一旦安装了 slycot 模块,下面的代码
返回
我在 slycot 模块上运行诊断并获得以下结果
我显然对 LAPACKE 有问题,但我似乎找不到。
预先感谢您的帮助!
c - LAPACKE 矩阵反演分段错误 C
我正在尝试使用 lapacke 库编写代码来反转 C 中的复杂矩阵。但是我遇到了一个似乎取决于矩阵大小 N 的分段错误。更重要的是,每次编译程序或触摸任何东西时,发生分段错误的大小都会有所不同。这让我觉得代码在某处试图访问分配不当或被禁止的内存。不幸的是,我不明白这是怎么发生的,因为它似乎与 LAPACKE 函数本身有关。事实上,当函数 / *MatrixComplexInv(invA,A,N);*/
(其中调用 LAPACKE 函数进行反转)被注释时,不会发生分段错误。下面是可以自行编译和运行的工作代码。
c# - Intel MKL LAPACKE_dsyevd with n > 32766 --> 没有足够的内存在 LAPACKE_dsyevd 中分配工作数组
我想使用英特尔 MKL(2019 更新 2)的LAPACKE_dsyevd计算实对称矩阵的所有特征值和所有特征向量。
我在 C# 中有以下方法:
和
和以下测试代码:
和
如果n
大于 32766,则会失败并显示以下错误消息:
没有足够的内存在 LAPACKE_dsyevd 中分配工作数组
我的电脑有 128 GB 的 RAM,应该足够了。我知道<gcAllowVeryLargeObjects enabled="true" />
并已将其设置为 true。我也很清楚 C# 中多维数组的 65535^2 限制,请参阅2d-Array with more than 65535^2 elements --> Array dimensions exceeded supported range。
顺便说一句,我可以使用 MATLAB 计算 n = 40000 或更大的矩阵的特征值分解。而且我认为 MATLAB 也在后台使用英特尔 MKLin 来计算它。
那么如何使用英特尔 MKL 在 C# 中计算非常大的矩阵(n > 40000)的特征值分解?