标签: lapack

windows下如何使用lapack

我想使用 lapack 并为其制作 C++ 矩阵包装器,但 lapack 是用 Fortran 编写的,有一些 clapack 但我想从源代码使用它。首先将 *.f 和 *.cpp 文件编译为目标文件,然后将其链接到应用程序中。

我拥有以下应用程序和来源。

  • Visual Studio 教授版、dev c++、ultimate++、mingw 等等
  • g95 和 gfortran(在 mingw 下)编译器
  • lapack(最新来源)
  • blas(包含在 lapack 中)

我该如何申请,请帮忙...

我的操作系统是 Windows 7 和 CPU Core2Duo,并且我没有 Intel 数学内核

c++ windows fortran lapack lapack++

5
推荐指数
1
解决办法
4065
查看次数

在 numpy 的 svd 方法中使用替代 LAPACK 驱动程序?

我正在使用 numpy.svd 来计算条件不良矩阵的奇异值分解。对于某些特殊情况,svd 不会收敛并引发 Linalg.Error。我做了一些研究,发现 numpy 使用 LAPACK 中的 DGEESDD 例程。标准实现的硬编码迭代限制为 35 次或更多迭代。如果我尝试在 Matlab 中分解相同的矩阵,一切都会正常,我认为有两个原因: 1. Matlab 使用 DGESVD 而不是 DGEESDD,后者通常看起来更稳健。2. Matlab 在例程中使用 75 次迭代限制。(他们在源代码中更改了它并重新编译了它。)

现在的问题是:是否有一种简单的方法可以将 numpy 中使用的后端从 DGEESDD 更改为 DGESVD,而无需修改 numpy 源?

预先感谢米莎

numpy exception svd lapack

5
推荐指数
1
解决办法
1377
查看次数

BLAS DGEMM:我可以将 C 作为 A 或 B 传递吗?

我想执行一串矩阵乘法,如果可以避免的话,我宁愿不分配新的矩阵。例如,我想计算 C = C * B (所以我将 C 作为A和传递C

我可以这样做吗(因为dgemmA和 都标记Bin变量)?

fortran blas lapack

5
推荐指数
1
解决办法
1479
查看次数

未定义参考Armadillo的LAPACK包装器

我对犰狳的使用有疑问.

我正在使用Ubuntu 12.10,以及Code :: Blocks中的gcc编译器.我使用synaptic包管理器安装了LAPACK和BLAS.我还使用突触包管理器安装了一次Armadillo,一次是用CMake手动安装的.CMake在进行犰狳编译的配置时找到了LAPACK和BLAS库.此外,我在"构建选项" - >"链接器"中的代码::块中链接了BLAS和LAPACK的库.

但是,每当我想构建我的项目时,我都会收到错误消息:

 In function `void arma::lapack::getrf<double>(int*, int*, double*, int*, int*, int*)':|
/usr/include/armadillo_bits/lapack_wrapper.hpp|41|undefined reference to `wrapper_dgetrf_'|
Run Code Online (Sandbox Code Playgroud)

这显然意味着犰狳找不到LAPACK,但我做错了什么?

我还取消了armadillo_bits/config.hpp文件中各自的行,因此它看起来像这样:

    #if !defined(ARMA_USE_LAPACK)
    //#define ARMA_USE_LAPACK
    //// Uncomment the above line if you have LAPACK or a high-speed replacement for LAPACK,
    //// such as Intel MKL, AMD ACML, or the Accelerate framework.
    //// LAPACK is required for matrix decompositions (eg. SVD) and matrix inverse.
    #endif

    #if !defined(ARMA_USE_BLAS)
    //#define ARMA_USE_BLAS
    //// Uncomment the above line if you have BLAS or …
Run Code Online (Sandbox Code Playgroud)

c++ linker lapack armadillo

5
推荐指数
1
解决办法
7446
查看次数

将 gfortran 链接到 LAPACK 和 BLAS 时出错

我已经从 Ubuntu 中的 Synaptic 包管理器安装了 LAPACK 和 BLAS。

whereis libblas
libblas: /usr/lib/libblas.so /usr/lib/libblas.a /usr/lib/libblas

whereis liblapack
liblapack: /usr/lib/liblapack.a /usr/lib/liblapack.so
Run Code Online (Sandbox Code Playgroud)

当我尝试编译randomsys1 示例时gfortran我收到以下错误消息。

gfortran randomsys1.f90 -L/usr/lib/lapack -llapack -L/usr/lib/libblas -lblas
/tmp/cclwtifh.o: In function `MAIN__':
randomsys1.f90:(.text+0x12): undefined reference to `init_random_seed_'
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

或者

gfortran randomsys1.f90 -llapack -lblas
/tmp/ccB1isEC.o: In function `MAIN__':
randomsys1.f90:(.text+0x12): undefined reference to `init_random_seed_'
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

根据我的理解,这是gfortranlapackand链接的推荐方式blas(请参考gfortran LAPACK “undefined reference” error …

fortran gfortran blas lapack

5
推荐指数
1
解决办法
8454
查看次数

Hadamard 产品的最快代码

有两个维度为 2 的复杂数组,我想计算一个逐点乘法(Hadamard 乘积):

complex(8) :: A(N,N), B(N,N), C(N,N)
...
do j = 1, N
  do i = 1, N
    C(i,j) = A(i,j)*B(i,j)
  enddo
enddo
Run Code Online (Sandbox Code Playgroud)

是否有任何 BLAS 例程来优化它,或者这实际上已经是编写 Hadamard 产品的最有效方法?或者在这种简单的情况下,编译器是否为我完成了这项工作?

我用 Fortran 编码,所以第一个索引是快速索引。

optimization blas lapack matrix-multiplication

5
推荐指数
0
解决办法
1446
查看次数

求解约束线性方程组

我有一个y = Ax + b形式的方程组,其中y,xb是n×1向量,A是×n(对称)矩阵.

所以这里是皱纹.并非所有的x都是未知的.指定了某些x行,并且y的相应行未知.以下是一个例子

| 10  |   |  5  -2  1 | | * |   | -1 |
|  *  | = | -2   2  0 | | 1 | + |  1 |
|  1  |   |  1   0  1 | | * |   |  2 |
Run Code Online (Sandbox Code Playgroud)

其中,*指定未知数.

我已经为Fortran中的上述问题构建了一个求解器,但是我想知道是否有一个不错的鲁棒求解器作为Lapack或MLK的一部分用于这些类型的问题?


我的求解器基于一个排序矩阵,称为根据已知和未知pivot = [1,3,2]重新排列x …

fortran matrix linear-algebra lapack fortran95

5
推荐指数
1
解决办法
3281
查看次数

R 是否在启动时创建了太多线程

每次调用 R 都会创建 63 个子进程

Rscript --vanilla  -e 'Sys.sleep(5)' &  pstree -p $! | grep -c '{R}'
# 63
Run Code Online (Sandbox Code Playgroud)

哪里pstree看起来像这样

R(2562809)???{R}(2562818)                                                                                                                                                     
           ??{R}(2562819)
           ...
           ??{R}(2562878)
           ??{R}(2562879)
           ??{R}(2562880)
Run Code Online (Sandbox Code Playgroud)

这是预期的行为吗?

这是一台带有 debian 9.3、R 3.4.3、blas 3.7.0 和 openmp 2.0.2 的 72 核机器

dpkg-query -l '*blas*' 'r-base' '*lapack*' '*openmp*'|grep ^ii
ii  libblas-common     3.7.0-2                    amd64        Dependency package for all BLAS implementations
ii  libblas-dev        3.7.0-2                    amd64        Basic Linear Algebra Subroutines 3, static library
ii  libblas3           3.7.0-2                    amd64        Basic Linear Algebra Reference implementations, shared library
ii …
Run Code Online (Sandbox Code Playgroud)

parallel-processing r blas lapack

5
推荐指数
1
解决办法
886
查看次数

python中参数化的厄米矩阵的特征系统

假设我们对依赖于参数 t 的厄密矩阵 h(t) 的特征值和特征向量感兴趣。我的矩阵又大又稀疏,因此需要进行数值处理。

一种简单的方法是在离散化参数值 t_k 处评估矩阵 h(t_k)。是否可以根据“特征向量的特征”对特征向量和特征值进行排序?

让我用下面的简单例子来说明我所说的“特征向量的特征”是什么意思(i 表示虚数单位)。

h(t) = {{1, i t}, {-i t, 1}}

特征值为 1-t 和 1+t,具有相应的特征向量 {-i, 1} 和 {i, 1}。因此,根据“特征向量特征”进行排序,特征值应该在 t = 0 处交叉。然而,大多数特征求解器通过增加特征值来对它们进行排序,将特征向量从负交换为正 t(参见代码和输出图)。

import numpy as np
import scipy.sparse.linalg as sla
import matplotlib.pyplot as plt

def h(t):
    # parametrized hermitian matrix
    return np.array([[1, t*1j], [-t*1j, 1]])


def eigenvalues(t):
    # convert to tuple for np.vectorize to work
    return tuple(sla.eigsh(h(t), k=2, return_eigenvectors=False))

eigenvalues = np.vectorize(eigenvalues)

t = np.linspace(-1, 1, num=200) …
Run Code Online (Sandbox Code Playgroud)

python scipy eigenvalue sparse-matrix lapack

5
推荐指数
0
解决办法
190
查看次数

numpy 矩阵 mult 在 HPC 上并行化时不起作用

我有两个大小为 (2500, 208) 和 (208, 2500) 的密集矩阵。我想计算他们的产品。当它是单个进程时,它运行良好且快速,但当它处于多处理块中时,进程会在那里停留数小时。我做更大尺寸的稀疏矩阵乘法,但我没有问题。我的代码如下所示:

with Pool(processes=agents) as pool:
    result = pool.starmap(run_func, args)
def run_func(args):
    #Do stuff. Including large sparse matrices multiplication. 
    C = np.matmul(A,B) # or A.dot(B) or even using BLASS library directly dgemm(1, A, B)
    #Never go after the line above!

Run Code Online (Sandbox Code Playgroud)

请注意,当该函数run_func在单个进程中执行时,它可以正常工作。当我在本地机器上进行多处理时,它工作正常。当我在 HPC 上进行多处理时,它卡住了。我这样分配我的资源:

srun -v --nodes=1 --time 7-0:0 --cpus-per-task=2 --nodes=1 --mem-per-cpu=20G python3 -u run.py 2

其中最后一个参数是agents上面代码中的数字。这是 HPC 上支持的 LAPACK 库详细信息(从 numpy 获得):

    libraries = ['mkl_rt', 'pthread']
    library_dirs = ['**/lib']
    define_macros = …
Run Code Online (Sandbox Code Playgroud)

python numpy lapack intel-mkl slurm

5
推荐指数
1
解决办法
173
查看次数