24小时热门版块排行榜    

查看: 2493  |  回复: 8

dexter337

铁杆木虫 (小有名气)

[交流] 最近碰到的一个Intel visual Fortran 计算精度的问题.大家的机器上是否也是这样? 已有5人参与

我 以前都是用compaq visual Fortran 6.6的imsl库进行计算的.但是近期需要加大计算的矩阵维数.因此需要改用Intel visual Fortran的mkl函数库.我的程序中用到了zgesv这个函数求解一个复系数的方程组.
       原来用compaq visual Fortran的时候用的是imsl中的dlsacg精度很好.但是在Intel visual Fortran上跑的结果误差很严重.于是开始查找出错原因.
       后来我发现一个奇怪的现象.就是用imsl手册中的一个计算例子,在Intel 上出的结果精度好像不够.希望大家提提意见,多多讨论,小虫不胜感激.
       Intel visual Fortran中程序例子如下:
               program main
        implicit none
        integer(8),parameter::n=3
        complex(8)::a(n,n),b(n)
        integer(8)::info,ipiv(n)
        a=reshape((/(3.0d0,-2.0d0),(1.0d0,1.0d0),(4.0d0,0.0d0),(2.0d0,4.0d0),(2.0d0,-6.0d0),&
        (-5.0d0,1.0d0),(0.0d0,-3.0d0),(1.0d0,2.0d0),(3.0d0,-2.0d0)/),(/n,n/))
        b=(/(10.0d0,5.0d0),(6.0d0,-7.0d0),(-1.0d0,2.0d0)/)
        call zgesv(n,1,a,n,ipiv,b,n,info)
        open(2,file='x.txt')
        write(2,5)b
5        format(2f20.16)
        end program main

       这个例子求解方程a*x=b这样的问题.结果是很整齐的解析结果是x=(1-i,2+i,3i).用compaq visual Fortran的结果是.
       1.0000000000000000 -1.0000000000000000
       2.0000000000000000  1.0000000000000000
       0.0000000000000000  3.0000000000000000
       基本上看不出误差.相应的dlsacg函数在我要计算的模型中工作的精度都很好.
       可是问题来了,在Intel中(也就是上面的程序.用mkl库给出的结果是.
      1.0000000000000024 -1.0000000000000004
      1.9999999999999987  1.0000000000000000
      -0.0000000000000039  2.9999999999999991
       这个结果有些出人意料,希望大家不要笑话我.因为我接下来用到这个函数的地方矩阵的性质比例子中的矩阵差的非常多.计算的结果精度非常不理想.
       想问问论坛里的虫友们,大家有没有遇到过这样的问题.有没有什么调节或者校准mkl或者Intel visual Fortran的方法或者设置呢?
       我使用的是 Intel visual Fortran 11.1.065专业版.自带的mkl是10.2版的.
       在这里先谢谢大家了,祝虫友们圣诞快乐!
回复此楼

» 本帖已获得的红花(最新10朵)

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

pippi6

铁杆木虫 (著名写手)

工程和科学数值计算咨询


小木虫: 金币+0.5, 给个红包,谢谢回帖
我看了一下,似乎Intel 给出的数据也在双精度舍入误差允许范围内,如有差别也不显著。你没有具体说明这样的舍入误差是如何影响你后面的结果的。如果这样的误差能影响你后面的结果,那只能说明你后面的算法不太robust。这种量级的误差可能有各种原因引起,不一定是数学库的原因。比如你给的cvf数据结果里3.0000000000000000 有16位0,这显然不可能是一般的结果。变换数组在内存中的位置,对其他变量的赋值都可能会改变这一状况。
2楼2014-12-26 04:28:54
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
送红花一朵
3楼2014-12-26 08:43:39
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

todd0226

新虫 (初入文坛)


小木虫: 金币+0.5, 给个红包,谢谢回帖
1、是不是数据类型不一致,我之前的程序因为这个原因结果有些误差。
2、当我在Use Intel Math Kernel Library中设置成Sequential (/Qmkl:sequential)时,release和debug模式下计算结果完全一样,而且多次计算结果一样。然而当我设置成Parallel (/Qmkl:parallel)时,release和debug模式下计算结果有些不同,多次计算的结果也有些微差别。
不知楼主的问题有没有可能是上面的原因。或者楼主能否解释一下第二个问题的原因呢?
4楼2014-12-26 09:17:54
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

dexter337

铁杆木虫 (小有名气)

引用回帖:
4楼: Originally posted by todd0226 at 2014-12-26 09:17:54
1、是不是数据类型不一致,我之前的程序因为这个原因结果有些误差。
2、当我在Use Intel Math Kernel Library中设置成Sequential (/Qmkl:sequential)时,release和debug模式下计算结果完全一样,而且多次计算结果一 ...

感谢你的回复.
      我也怀疑过这个问题,首先设置了Fortran默认的数据存储类型.(默认是integer kind=4,real kind=4,complex kind=8),所以在最开始发现的问题是输入给函数的数据不同于compaq的.(此问题在发帖前已经排除).
      后来我也在服务器上实验了这个例子,结果和台式机上一样.用的是串行计算.我试验的结果是,串行和并行结果一样.
5楼2014-12-26 16:19:06
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

dexter337

铁杆木虫 (小有名气)

引用回帖:
2楼: Originally posted by pippi6 at 2014-12-26 04:28:54
我看了一下,似乎Intel 给出的数据也在双精度舍入误差允许范围内,如有差别也不显著。你没有具体说明这样的舍入误差是如何影响你后面的结果的。如果这样的误差能影响你后面的结果,那只能说明你后面的算法不太robus ...

感谢你的回复:
      确实,我觉得这样的分析很有道理.我怀疑可能是compaq visual Fortran中的imsl4.0版本中的dlsacg函数里面可能有双精度复数数据转存的操作.因此吧后面很小的虚部也可能包含的误差抹除掉了.
      不过后来在Intel visual Fortran上也安装了imsl7.0函数库.结果使用相同的dlsacg进行计算的时候结果是含有误差的,结果可以精确到小数点后14位.看来版本变化的时候函数内部可能不同了.
      还有就是,我分析了函数被调用之前的输入(给dlsacg,zgesv的输入),数据是一样的.所以,我觉得差别应该是在函数内部.
6楼2014-12-26 16:30:11
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

dexter337

铁杆木虫 (小有名气)

引用回帖:
3楼: Originally posted by liujiebaggio at 2014-12-26 08:43:39

您都已经老师了,别跑出来捣乱哈.
你坏坏
7楼2014-12-26 16:31:10
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lion-wolf

银虫 (正式写手)


小木虫: 金币+0.5, 给个红包,谢谢回帖
送红花一朵
能发一个Intel visual Fortran 11.1.065专业版的激活文件给我吗
劝君莫惜金缕衣,劝君吸取少年时;花开堪折直须折,莫待无花空折枝。
8楼2016-01-17 16:20:34
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

问天阁

木虫 (正式写手)


小木虫: 金币+0.5, 给个红包,谢谢回帖
选主元的算法的事情有没有可能

发自小木虫Android客户端
9楼2016-01-18 12:38:06
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 dexter337 的主题更新
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见