24小时热门版块排行榜    

查看: 2531  |  回复: 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 的主题更新
普通表情 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考博] 售SCI一区文章,我:8 O5 51O 54,科目齐全 +4 2h7du0nuhk 2026-02-07 4/200 2026-02-07 22:24 by ioveiuleh5
[硕博家园] 售SCI一区文章,我:8 O5 51O 54,科目齐全 +3 2h7du0nuhk 2026-02-07 4/200 2026-02-07 22:11 by ioveiuleh5
[考博] 售SCI一区文章,我:8 O5 51O 54,科目齐全 +3 2h7du0nuhk 2026-02-07 5/250 2026-02-07 22:06 by ioveiuleh5
[教师之家] 售SCI一区文章,我:8 O5 51O 54,科目齐全 +3 2h7du0nuhk 2026-02-07 5/250 2026-02-07 22:04 by ioveiuleh5
[教师之家] 有院领导为了换新车,用横向课题经费买了俩车 +7 瞬息宇宙 2026-02-04 7/350 2026-02-07 21:47 by tfang
[找工作] 售SCI一区文章,我:8 O5 51O 54,科目齐全 +3 2h7du0nuhk 2026-02-07 5/250 2026-02-07 21:46 by ioveiuleh5
[公派出国] 售SCI一区文章,我:8 O5 51O 54,科目齐全 +3 2h7du0nuhk 2026-02-07 6/300 2026-02-07 21:44 by ioveiuleh5
[考博] 售SCI一区文章,我:8 O5 51O 54,科目齐全 +3 2h7du0nuhk 2026-02-07 6/300 2026-02-07 21:31 by ioveiuleh5
[教师之家] 售SCI一区文章,我:8 O5 51O 54,科目齐全 +3 2h7du0nuhk 2026-02-07 6/300 2026-02-07 21:26 by ioveiuleh5
[硕博家园] 售SCI一区文章,我:8 O5 51O 54,科目齐全 +3 2h7du0nuhk 2026-02-07 6/300 2026-02-07 21:11 by ioveiuleh5
[有机交流] 酰胺脱乙酰基 10+5 chibby 2026-02-03 12/600 2026-02-07 19:29 by 江东闲人
[硕博家园] 售SCI一区文章,我:8 O5 51O 54,科目齐全 +3 2h7du0nuhk 2026-02-07 3/150 2026-02-07 18:31 by 6ntj4f1rhx
[基金申请] 同年申请2项不同项目,第1个项目里不写第2个项目的信息,可以吗 +4 hitsdu 2026-02-06 4/200 2026-02-07 13:07 by jurkat.1640
[基金申请] 有时候真觉得大城市人没有县城人甚至个体户幸福 +9 苏东坡二世 2026-02-04 10/500 2026-02-07 12:37 by 小毛球
[考博] 天津大学招2026.09的博士生,欢迎大家推荐交流(博导是本人) +4 a793625982 2026-02-05 5/250 2026-02-07 10:57 by a793625982
[公派出国] CSC & MSCA 博洛尼亚大学能源材料课题组博士/博士后招生|MSCA经费充足、排名优 +4 雨念 2026-02-01 6/300 2026-02-06 23:32 by MelissaPon
[基金申请] 面上项目申报 +3 Tide man 2026-02-01 3/150 2026-02-05 22:56 by god_tian
[硕博家园] 博士延得我,科研能力直往上蹿 +7 偏振片 2026-02-02 7/350 2026-02-04 17:36 by 陈氏帝国
[基金申请] 面上基金申报没有其他的参与者成吗 +5 默默的小虫子 2026-01-31 5/250 2026-02-04 11:26 by 学员fOzRO9
[教师之家] 遇见不省心的家人很难过 +18 otani 2026-02-03 22/1100 2026-02-04 11:06 by tangmnt
信息提示
请填处理意见