- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图找到相当大的稀疏矩阵的特征值,并且我安装了英特尔 MKL 库。我正在用 Fortran 90 编写。因为我的矩阵是稀疏的,所以我希望使用 Extended Eigensolver查找特征值的例程。但是我发现与密集的 MKL 例程相比它非常慢。我编写了一个代码来生成各种大小的矩阵 2**N x 2**N
并使用以下例程找到不同的特征值:
dsyev()
dsyevr()
dsyevd()
dsyev_f95()
dsyevr_f95()
dsyevd_f95()
dfeast_scsrev()
最后一个是扩展特征求解程序。我不认为 LAPACK 例程的 f77 和 f95 版本之间有任何区别,除了据我所知,dsyevr_f95()
没有 JOBZ
参数,因此我不能告诉它只计算特征值(而不是特征向量)。据我所知,我也不能告诉 dfeast_scsrev()
例程只计算特征值。
我为各种矩阵大小对这些例程进行计时,我发现 dfeast_scsrev()
比 dsyevr_f95()
花费大约 100 倍的时间,这已经是原来的 10 倍比其他的慢,因为它也在计算特征向量。这对我来说似乎很奇怪,我想知道我是否做错了什么。结果如下所示:
time to build H
就是构造矩阵的时间
矩阵的密度
是非零元素的分数
time to convert to sparse
是从密集格式转换为 CSR 格式的时间(可忽略不计)。
表中所列时间为调用相关LAPACK/MKL例程的子程序的调用次数。时间是时钟时间,不是挂钟时间
###############################################################################
N= 4
time to build H: 0
dimensions of matrix: 16 x 16
density of matrix: 0.140625000000000
time to convert to sparse: 0
time to run dfeast_scsrev: 1130
dsyev dsyevr dsyevd
----------------------------------------------------
f77 versions: 150 10 30
f95 versions: 30 30 20
sparse version : 1180
###############################################################################
N= 5
time to build H: 0
dimensions of matrix: 32 x 32
density of matrix: 0.109375000000000
time to convert to sparse: 0
time to run dfeast_scsrev: 50
dsyev dsyevr dsyevd
----------------------------------------------------
f77 versions: 20 30 40
f95 versions: 40 30 130
sparse version : 90
###############################################################################
N= 6
time to build H: 0
dimensions of matrix: 64 x 64
density of matrix: 6.250000000000000E-002
time to convert to sparse: 0
time to run dfeast_scsrev: 170
dsyev dsyevr dsyevd
----------------------------------------------------
f77 versions: 20 90 110
f95 versions: 30 60 90
sparse version : 340
###############################################################################
N= 7
time to build H: 0
dimensions of matrix: 128 x 128
density of matrix: 3.515625000000000E-002
time to convert to sparse: 0
time to run dfeast_scsrev: 520
dsyev dsyevr dsyevd
----------------------------------------------------
f77 versions: 180 140 140
f95 versions: 190 270 140
sparse version : 740
###############################################################################
N= 8
time to build H: 10
dimensions of matrix: 256 x 256
density of matrix: 1.739501953125000E-002
time to convert to sparse: 10
time to run dfeast_scsrev: 3750
dsyev dsyevr dsyevd
----------------------------------------------------
f77 versions: 350 270 520
f95 versions: 420 790 410
sparse version : 4240
###############################################################################
N= 9
time to build H: 0
dimensions of matrix: 512 x 512
density of matrix: 1.074218750000000E-002
time to convert to sparse: 10
time to run dfeast_scsrev: 33250
dsyev dsyevr dsyevd
----------------------------------------------------
f77 versions: 570 1050 820
f95 versions: 1060 2880 500
sparse version : 33670
###############################################################################
N= 10
time to build H: 10
dimensions of matrix: 1024 x 1024
density of matrix: 5.859375000000000E-003
time to convert to sparse: 80
time to run dfeast_scsrev: 222820
dsyev dsyevr dsyevd
----------------------------------------------------
f77 versions: 1870 2130 2230
f95 versions: 2290 8110 2010
sparse version : 223570
我的代码可以查看here
我已确认所有例程都产生相同的特征值。
所以我的问题是,这是正确的吗?为什么稀疏特征求解器这么慢?我做错了什么或者我可以做些什么来加快速度吗?请注意,这里的所有内容都是按顺序运行的,没有并行化。最后,任何人都可以推荐一个替代的稀疏特征求解器吗?考虑到这些矩阵的稀疏性(并且我想达到 N=16
或更多),我认为稀疏求解器比密集的 LAPACK 求解器更有效。
最佳答案
我没有使用过您正在使用的库的经验,因此无法对其性能发表评论。如果要求代码使用 Fortran 语言,我使用 JADAMILU 在对称稀疏矩阵上取得了很好的结果。 ,它执行自动预处理并具有相当简单的文档(与 ARPACK 等一些老派的东西相比)。如果您可以摆脱使用 Fortran,我建议您 PySparse .
编辑:查看您的测试数据后,我对您的结果并不太惊讶。使用稀疏求解器会产生显着的性能开销,尤其是对于您使用的相对较小的数组。您通常会从内存中获益,因为对于大型稀疏数组,稀疏存储方法会显着压缩您的数据。
关于matrix - Intel Extended Eigensolver(用于稀疏矩阵)极慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49710694/
我在服务器上 checkout 了一个 git 存储库。该存储库过去在根目录下包含所有相关文件,但我必须进行一些更改,现在我有两个文件夹,src 和 dist,我想跟踪这两个文件夹. 我遇到的问题是,
我很难弄清楚 VkDescriptorSetLayoutBinding::binding 的任何用例,这是结构: struct VkDescriptorSetLayoutBinding { u
Python中能否有效获取稀疏向量的范数? 我尝试了以下方法: from scipy import sparse from numpy.linalg import norm vector1 = spa
我正在尝试找出为什么这段代码不对数组进行排序... 任意向量。 x = array([[3, 2, 4, 5, 7, 4, 3, 4, 3, 3, 1, 4, 6, 3, 2, 4, 3, 2]])
有谁知道如何压缩(编码)稀疏 vector ?稀疏 vector 表示有许多“0”的 1xN 矩阵。 例如 10000000000001110000000000000000100000000 上面是稀
我使用稀疏高斯过程进行 Rasmussen 回归。[http://www.tsc.uc3m.es/~miguel/downloads.php][1] 预测平均值的语法是: [~, mu_1, ~, ~
我在朴素贝叶斯分类器中使用 Mahout API。其中一个功能是 SparseVectorsFromSequenceFiles虽然我已经尝试过旧的谷歌搜索,但我仍然不明白什么是稀疏 vector 。最
我正在尝试将JavaScript稀疏数组映射到C#表示形式。 建议这样做的方法是什么? 它正在考虑使用一个字典,该字典包含在原始数组中包含值的原始词列表。 还有其他想法吗? 谢谢! 最佳答案 注意 针
如果我想求解一个完整上三角系统,我可以调用linsolve(A,b,'UT')。然而,这目前不支持稀疏矩阵。我该如何克服这个问题? 最佳答案 UT 和 LT 系统是最容易解决的系统之一。读一读on t
我有一个带有 MultiIndex 的 Pandas DataFrame。 MultiIndex 的值在 (0,0) 到 (1000,1000) 范围内,该列有两个字段 p 和 q. 但是,DataF
我目前正在实现一个小型有限元模拟。使用 Python/Numpy,我正在寻找一种有效的方法来创建全局刚度矩阵: 1)我认为应该使用coo_matrix()从较小的单元刚度矩阵创建稀疏矩阵。但是,我可以
a , b是 1D numpy ndarray与整数数据类型具有相同的大小。 C是一个 2D scipy.sparse.lil_matrix . 如果索引[a, b]包含重复索引,C[a, b] +=
我有一个大的、连通的、稀疏的邻接表形式的图。我想找到两个尽可能远的顶点,即 diameter of the graph以及实现它的两个顶点。 对于不同的应用程序,我对无向和有向情况下的这个问题都很感兴
上下文:我将 Eigen 用于人工神经网络,其中典型维度为每层约 1000 个节点。所以大部分操作是将大小为 ~(1000,1000) 的矩阵 M 与大小为 1000 的 vector 或一批 B v
我有一些大小合适的矩阵 (2000*2000),我希望在矩阵的元素中有符号表达式 - 即 .9**b + .8**b + .7**b ... 是一个元素的例子。矩阵非常稀疏。 我通过添加中间计算来创建
在 R 或 C++ 中是否有一种快速填充(稀疏)矩阵的方法: A, B, 0, 0, 0 C, A, B, 0, 0 0, C, A, B, 0 0, 0, C, A, B 0, 0, 0, C, A
我有一个大的稀疏 numpy/scipy 矩阵,其中每一行对应于高维空间中的一个点。我想进行以下类型的查询: 给定一个点P(矩阵中的一行)和一个距离epsilon,找到与epsilon距离最大的所有点
假设我有一个 scipy.sparse.csr_matrix 代表下面的值 [[0 0 1 2 0 3 0 4] [1 0 0 2 0 3 4 0]] 我想就地计算非零值的累积和,这会将数组更改为:
我了解如何在 Git 中配置稀疏 checkout ,但我想知道是否可以消除前导目录。例如,假设我有一个 Git 存储库,其文件夹结构如下: 文件夹1/foo 文件夹2/foo/bar/stuff 文
根据 this thread , Git 中的排除 sparse-checkout feature应该实现。是吗? 假设我有以下结构: papers/ papers/... presentations
我是一名优秀的程序员,十分优秀!