Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matrix 英特尔扩展特征解算器(用于稀疏矩阵)速度极慢_Matrix_Fortran_Sparse Matrix_Lapack_Intel Mkl - Fatal编程技术网

Matrix 英特尔扩展特征解算器(用于稀疏矩阵)速度极慢

Matrix 英特尔扩展特征解算器(用于稀疏矩阵)速度极慢,matrix,fortran,sparse-matrix,lapack,intel-mkl,Matrix,Fortran,Sparse Matrix,Lapack,Intel Mkl,我正试图找到相当大的稀疏矩阵的特征值,我已经安装了英特尔MKL库。我正在用Fortran 90编写。因为我的矩阵是稀疏的,所以我希望使用例程来找到特征值。然而,我发现它与密集的MKL例程相比非常慢。我编写了一个代码来生成各种大小的矩阵2**nx2**N,并使用以下例程找到各种特征值: dsyev() dsyevr() dsyevd() dsyev_f95() dsyevr_f95() dsyevd_f95() dfeast_scsrev() 最后一个是扩展的特征解算器例程。我不希望LAPACK

我正试图找到相当大的稀疏矩阵的特征值,我已经安装了英特尔MKL库。我正在用Fortran 90编写。因为我的矩阵是稀疏的,所以我希望使用例程来找到特征值。然而,我发现它与密集的MKL例程相比非常慢。我编写了一个代码来生成各种大小的矩阵
2**nx2**N
,并使用以下例程找到各种特征值:

dsyev()
dsyevr()
dsyevd()
dsyev_f95()
dsyevr_f95()
dsyevd_f95()
dfeast_scsrev()
最后一个是扩展的特征解算器例程。我不希望LAPACK例程的f77和f95版本之间有任何区别,除了据我所知,
dsyevr_f95()
没有
JOBZ
参数,因此我不能告诉它只计算特征值(而不是特征向量)。就我所知,我也不能告诉
dfeast\u scsrev()
例程只计算特征值

我为不同的矩阵大小对这些例程进行计时,发现
dfeast\u scsrev()
dsyevr\u f95()
花费的时间大约要长100倍,这已经比其他程序慢了10倍,因为它也在计算特征向量。这对我来说似乎完全是一件怪事,我想知道我是否有什么地方做错了。结果如下所示:

构建H的时间
是构建矩阵的时间

矩阵密度
是非零元素的分数

转换为稀疏格式的时间
是从密集格式转换为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
可以查看我的代码

我已经证实所有的程序都会产生相同的特征值


所以我的问题是,这是正确的吗?为什么稀疏特征解算器如此缓慢?我有没有做错什么,或者我可以做些什么来加速它?注意这里的一切都是按顺序运行的,没有并行化。最后,有人能推荐另一种稀疏特征解算器吗?考虑到这些矩阵的稀疏性(我希望达到
N=16
或更高),我认为稀疏解算器将比密集LAPACK解算器更有效。

我对您使用的库没有经验,因此我无法评论其性能。如果要求代码使用Fortran,那么我已经在对称稀疏矩阵方面获得了很好的结果,使用它可以执行自动预处理,并且有相当简单的文档(与一些老派的东西(如ARPACK)相比)。如果你不用Fortran,我推荐你


编辑:看了你的测试数据后,我对你的结果并不感到惊讶。使用稀疏解算器会带来很大的性能开销,尤其是对于所使用的阵列的相对较小的尺寸。您通常会从内存中获益,因为对于大型稀疏阵列,稀疏存储方法会显著压缩您的数据。

我不一定需要所有的特征对,但我正在使用LAPACK例程查找所有特征值,因此我很惊讶它们会快得多。我还没有测试过只寻找几个特征值。稀疏解算器查找所有特征值的速度较慢,这有什么原因吗?如果有必要,另外,在英特尔论坛上发布一个问题(稍晚一点…)可能非常有用。先生,两年后,您是否找到其他高性能稀疏解算器?你能给我一些建议吗?@XuHui不幸的是,我从来没有解决过这个问题,从那以后我就不需要稀疏的特征解算器,并且能够使用常规的特征解算器