duty 发表于 2014-3-1 15:12:27

Intel Visual Fortran MKL DSS 求解大型稀疏矩阵方程出错

IVF入门,现需要调用DSS求解大型稀疏矩阵方程,修改了mkl自带的example dss_sym_f.f,仅修改了部分输入数据,可以正常编译,但debug时执行到
error = dss_reorder( handle, MKL_DSS_DEFAULTS, idum)
出现中断,显示如下。跪求大神指点。小弟用的是VS 2010 和 Intel Parallel Studio XE 2013。代码和输入数据文件见附件。







aliouying 发表于 2014-3-1 16:21:41

我想既然是MKL里面的例子,应该不会有错,只能是矩阵的问题或者是DSS不能求解这个矩阵

MKL里面有pardiso,也是求解系数矩阵的,试试这个函数

aliouying 发表于 2014-3-1 16:38:41

拿你的矩阵测试了下,只有SuperLU和MUMPS能求,具体得到的结果我不知道是否正确,但两个求解器的结果一致。
UMFPack和Pardiso都在reorder的时候出错,不知什么原因,求大神解释

我的系统是win32,IVF2013+VS2012,可能是库的编译问题
但pardiso是mkl下的,应该能求解的,但出错了

我有点纳闷的是,你的values的第一个元素为什么会是0?

楚香饭 发表于 2014-3-1 16:40:18

我想这个问题恐怕不是你的错,你的算例和代码都没有问题。

我在 intel 的论坛发现了去年的一个帖子提及 dss_reorder 出错,后来发布了新版本解决这一问题。但是是 C 接口的。

我不确定是不是 Fotran 的接口没有改。

MKL 是一个商业化的函数库,就算是矩阵问题,也会有良性的错误提示或返回值。而且 reorder 只是一个简单操作,对数据应该不会有多大依赖性。

aliouying 发表于 2014-3-1 16:43:42

chuxf 发表于 2014-3-1 16:40
我想这个问题恐怕不是你的错,你的算例和代码都没有问题。

我在 intel 的论坛发现了去年的一个帖子提及 ds ...

DSS有错误提示,UMFPack错误提示是-8,pardiso直接跳出C的子程序free.c

void __cdecl _free_base (void * pBlock)
{

      int retval = 0;


      if (pBlock == NULL)
            return;

      RTCCALLBACK(_RTC_Free_hook, (pBlock, 0));

      retval = HeapFree(_crtheap, 0, pBlock);
      if (retval == 0)
      {
            errno = _get_errno_from_oserr(GetLastError());
      }
}

aliouying 发表于 2014-3-1 16:44:11

retval = HeapFree(_crtheap, 0, pBlock);定在这一行

duty 发表于 2014-3-2 02:16:55

谢谢斑竹大神,我在Intel的论坛发帖问了,下面是回复
HI,

I've put your data into PARDISO interface and obtain following error:

*** Error in PARDISO(incorrect input matrix) error_num= 24
*** Input check: j=1410, ja(j)=72, ja(j+1)=67 are incompatible

The reason of this failure: in 72th row elements store in incorrect format - column of 1411th element is less than column of element with 1410 number in spite of they lie in one row!

Thanks,

Alex发现输入数据确实是乱序的~正在改

aliouying 发表于 2014-3-2 08:29:41

duty 发表于 2014-3-2 02:16
谢谢斑竹大神,我在Intel的论坛发帖问了,下面是回复
HI,



哦,怪不得,superLU和MUMPS对数据的顺序没要求

aliouying 发表于 2014-3-2 08:29:41

本帖最后由 aliouying 于 2014-3-2 08:30 编辑

duty 发表于 2014-3-2 02:16
谢谢斑竹大神,我在Intel的论坛发帖问了,下面是回复
HI,


哦,怪不得,superLU和MUMPS对数据的顺序没要求

只需要排序下即可,我到算法板块发下排序算法

aliouying 发表于 2014-3-2 08:39:08

排序后果然可以求解,结果一致
页: [1] 2
查看完整版本: Intel Visual Fortran MKL DSS 求解大型稀疏矩阵方程出错