问题标签 [lapack]
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.
matrix - Lapack + c + 矩阵
你能帮我理解如何调用 Lapack 例程吗?特别是,我想调用 DTRTRI (Uplo, DIAG, N, DA, LDA, INFO)。
python - Python 中的密集 Cholesky 更新
谁能给我指出一个库/代码,允许我在 python(numpy)中对 Cholesky 分解执行低等级更新?Matlab 将此功能作为一个名为“cholupdate”的函数提供。LINPACK 也具有此功能,但它(据我所知)尚未移植到 LAPACK,因此在 scipy 中不可用。
我发现 scikits.sparse 提供了一个基于 CHOLMOD 的类似函数,但我的矩阵很密集。
是否有任何代码可用于具有与 numpy 兼容的“cholupdate”功能的 python?
谢谢!
c++ - Win32 上的 LAPACK
我一直在探索需要在矩阵上做一些工作的算法,并且我已经得到了一些在我的 Linux 机器上运行的简单代码。这是一段摘录:
我所要做的就是sudo apt-get install liblapack
,链接到图书馆。
我现在正在尝试使用此处的 32 位 dll 从 MinGW 获取此代码,但我看到了段错误和无效输出。我将继续使用 gdb 来确定错误的位置,但我怀疑有更好、更清洁、更便携的方法来完成这项工作。
我为使其编译所做的工作是为 mingw ( mingw-get install fortran
) 安装 fortran 并从之前的链接链接到 32 位 BLAS 和 LAPACK dll。
我不确定我在这里错过了多少......当使用 gcc for win32 进行编码时,其他人是如何获得他们的 LAPACK 的?
我正在寻找的是一个易于使用的 C 接口。我不想到处都是包装类。
我试图找到英特尔 MKL 的下载...甚至不是免费软件!?
c++ - MinGW:与 LAPACK 和 BLAS 链接会导致 C++ 异常未处理
情况很简单,但很奇怪。当我在没有 LinearAlgebra.o 源(需要链接到 LAPACK)的情况下编译我的程序时,会捕获并处理 C++ 异常。当我不包含该编译单元但仍链接到库 ( -llapack -lblas
) 时,将捕获并处理异常。但是一旦我把它放在那里(它的代码运行得很好),C++ 异常就不再被正确处理,并且我得到 Windows 崩溃处理程序“程序已停止向总部响应报告”的废话。
在这里,我阐明了这个源文件中发生了什么。我确实让它很简单,但我不确定它是否真的是犹太洁食。
我怀疑这是因为调用 FORTRAN 例程导致 C++ 异常停止工作。但我不知道如何解决这个问题。
更新:
我很高兴为这个问题找到了一个临时的解决方法:我正在使用 MinGW 的gfortran
编译器直接编译我当前使用的 LAPACK 和 BLAS 例程。
-lgfortran
使用with将这些目标文件链接到我的 C++ 项目中g++
可以完美地工作,并且我的异常仍然得到正确处理!作为奖励,这允许我只包含我打算使用的 LAPACK 例程,所以现在我不再需要链接 ~4MB 库。
编辑:我认为如果我静态链接一个库,它只会“获取它需要的东西”,所以在这种情况下它是 4MB 并不重要。
c++ - GotoBLAS2 性能
我有一些代码使用 LAPACK 例程DPPTRF
、DPPTRI
和DSPMV
. 这是一个较旧的主题,您可以在其中看到我用来调用 LAPACK 例程的 C++ 代码。
我的代码目前组装了一个对称矩阵,该矩阵主要沿对角线填充。
我正在测试不同的 BLAS 和 LAPACK 实现,并将 GotoBLAS2 与 netlib 中的参考 LAPACK 实现进行比较。
下面是我如何编译 netlib LAPACK 代码。我.f
从源代码中选择代码文件,并将它们全部编译成一个紧凑的静态库,如下所示:
然后我可以使用-llapack_lite -lgfortran
.
然后我尝试使用 GotoBLAS2。我从这里得到的。该软件包包含自动编译大量 19MB 静态库的脚本。通过链接它可以很好地与我现有的代码配合使用:-lgoto2_nehalemp-r1.13
.
一开始我觉得这很顺利。使用 GotoBLAS2,在大型问题集(反转 1000x1000 或更大的矩阵)上,我看到了大约 6 倍的性能提升。由于 GotoBLAS 是针对我的架构进行线程化的,并且参考 LAPACK 是单线程的,我认为这是合理的。系统监视器还显示 > 300% 的 CPU 使用率来证实。
这就是它变得奇怪的地方。我想,如果我优化参考实现呢?
我像这样重新编译我的 lapack_lite 库:gfortran -c -O3 *.f
即使在 3200x3200 矩阵反转上,我的 lapack_lite 库现在也优于 GotoBLAS2,仅使用一个线程。它还消耗约 80MB 的 RAM。
然而,使用 GotoBLAS 之后的压缩矩阵向量乘法确实发生得更快。
这怎么可能?GotoBLAS 包的 make 配置是否未能使用 gfortran 的优化开关?
fortran - C vs Fortran for BLAS 2
I have an application in which I need to carry out a lot of Norms, Dot Products and most importantly, Matrix Vector multiplications.
matrix and vectors are huge. Matrix dimension is tending to be a 100000x100000
the loop structure is:
I am currently using Intel Fortran with Intel MKL. Will rewriting my codes in Intel C with Intel MKL help any? Has anyone ever carried out a benchmark of any kind (for DGEMV especially)? Rewriting codes is a major pain but I would not mind rewriting iff I see a reason to.
EDIT: I misspoke: The matrix dimensions are 100000 not a million. Pretty serious error :|
And yes, the matrix is dense and it needs to be dense. Moreover, it is not symmetric and not even positive definite. My algorithm is a modified version of QMR.
memory-leaks - dgemm_ 中的内存泄漏
我目前正在开发一个涉及大量调用 blas 例程的应用程序。定期检查我发现的内存泄漏,我在dgemm调用中丢失了字节。调用如下所示:
A、B 和 C 是大小为 n*n 的双字段。valgrind 输出为:
我检查了矩阵的尺寸。它们与预期的一样。我不明白 dgemm_ 调用如何造成这样的泄漏。我可以理解非法写入或读取。但我不明白 dgemm_ 如何导致泄漏。
mpi - MPI 和 OpenMP。我还有选择吗?
我有一个线性代数代码,我试图让它运行得更快。它是一种迭代算法,其中包含循环和矩阵向量乘法。到目前为止,我使用了 MATMUL(Fortran Lib.)、DGEMV,尝试在 OpenMP 中编写我自己的 MV 代码,但该算法在可扩展性方面并没有做得更好。无论我分配多少个处理器(我已经尝试了 64 个处理器),加速都几乎没有 3.5 - 4。分析显示在 Matrix-Vector 中花费了大量时间,其余时间相当名义上。我的问题是:我有一个拥有大量 RAM 和处理器的共享内存系统。我曾尝试调整代码的 OpenMP 实现(包括矩阵向量),但没有帮助。在 MPI 中编码会有所帮助吗?我不是 MPI 的专业人士,但微调消息通信的能力可能会有所帮助,但我不能确定。任何意见?
更一般地说,从我读过的文献来看,MPI = 分布式,OpenMP = 共享,但它们能在其他领域表现良好吗?像共享中的 MPI?它会起作用吗?如果做得好,它会比 OpenMP 实现更好吗?
mex - 如何在 mex 文件中使用 CLAPACK、BLAS 或 LAPACK?
我在 MATLAB 中编写 MEX 文件时遇到问题,该文件可以执行简单的线性运算,例如求矩阵的逆。我已经成功地使用 Visual Studio 2010 对矩阵求逆,并成功创建了一个 MEX 文件,因此我唯一遇到的问题是将这两个概念放在一起。我试图编译从 MathWorks 站点获得的 MEX 示例代码,但没有成功。
这是我尝试过的,
将我从 MathWorks 获得的文件(重命名)保存为 .c 扩展名,然后尝试在 MATLAB 中编译得到:
创建库 C:\Users\CIT\AppData\Local\Temp\mex_bKHjrl\templib.x 和对象 C:\Users\CIT\AppData\Local\Temp\mex_bKHjrl\templib.exp eko1.obj:错误 LNK2019:未解析的外部符号dgesv 在函数 mexFunction eko1.mexw64 中引用:致命错误 LNK1120:1 未解决的外部
我也尝试将它编译为 .cpp 文件,但是由于它无法识别 memcpy 函数而发生错误。
由于这些不起作用,我编写了自己的程序,该程序使用了 LAPACK 库中的子例程 dgetrf 和 dgetri,但是发生了错误:
c:\users\cit\documents\matlab\f2c.h(16):错误 C2371:“复杂”:重新定义;不同的基本类型 C:\Program Files\MATLAB\R2011b\extern\include\lapack.h(39) :参见“复杂”的声明 c:\users\cit\documents\matlab\f2c.h(17):错误 C2371 :'doublecomplex':重新定义;不同的基本类型 C:\Program Files\MATLAB\R2011b\extern\include\lapack.h(40) :参见“doublecomplex” eko2.cpp(29) 的声明:错误 C2057:预期的常量表达式 eko2.cpp(29):错误 C2466:无法分配常量大小 0 eko2.cpp(29) 的数组:错误 C2133:“ipiv”:未知大小 eko2.cpp(33):错误 C2664:“dgetrf”:无法从“整数 *”转换参数 1 to 'ptrdiff_t *' 指向的类型是不相关的;转换需要 reinterpret_cast,C-style cast 或 function-style cast eko2.cpp(34) : error C2664: 'dgetri' : cannot convert parameter 1 from 'integer *' to 'ptrdiff_t *' 指向的类型不相关;转换需要 reinterpret_cast、C-style cast 或 function-style cast
你们给我的任何帮助将不胜感激
提前致谢。
gcc - LAPACK 与 gcc 启动指南
我需要帮助在 Linux gcc 中设置 LAPACK。我是 LAPACK 新手,不知道使用 Fortran。
我已经下载了 lapack-3.4.0,并制作了获取 liblapack.a 和 librefblas.a 的库。
之后,我将这些库链接到我的程序:-llapack -lrefblas
我想使用 dpotrf、dgetrf、dgetri 等 LAPACK 函数,如何包含头文件以便编译器找到函数?我有必要使用 lapacke,一个 LAPACK 的 C 接口吗?