Fortran Coder

查看: 13905|回复: 10
打印 上一主题 下一主题

[调试器] 关于调试的问题

[复制链接]

9

帖子

2

主题

0

精华

入门

F 币
60 元
贡献
35 点
跳转到指定楼层
楼主
发表于 2016-9-23 12:55:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
编译环境:IVF Compiler XE 14.0.1.139 [Intel(R) 64]
系统:Win 10
Visual 版本  Visual_Studio_Ultimate_2012

问题描述:
程序共包括五个子程序
  <Call fn0(fn,ak)                   !积分点
  Call Get_mass_matirx(n, fn, ak,gama,lamda_all,B0,M_sum)   !质量矩阵
  Call Assem_Stiff_Sub(n, fn, ak, gama,lamda_all,B0,DK_sum)  !刚度矩阵
  Call Stiff_Pen_Sub(n,fn,ak,gama,lamda_all,B0,K_pen)             !修正矩阵
  Call Stiff_Larg_Sub(n,fn,ak,gama,lamda_all,B0,K_Larg)>         !修正矩阵

其中修正矩阵下,又分别调用子程序,以子程序Assem_Stiff_Sub为例,其又调用了子程序Stiff_Chev_ds_RBC
Subroutine Assem_Stiff_Sub(n,fn,ak,gama,lamda_all,B0,DK_sum)
******
程序内容省略
*****
Do k = 1, n
     Do j = 1, n
     Do i = 1, n
     call Stiff_Chev_ds_RBC(fn(i),fn(j),fn(k),gama,lamda_all,B0,KUU_R,KUV_R,KUW_R,KVV_R,KVW_R,KWW_R)
     **********(该部分是对传入和返回值的计算,太多略去)
     End Do
     End Do
  End Do
(该段下文取名为A程序段)
******
程序内容省略
*****End Subroutine Assem_Stiff_Sub

遇到的问题是,编译正常,当主程序中发生参数改动时,调试、生成均变得非常慢。
经过摸索,发现通过把 调用子程序的A程序段注释掉,然后调试或者启动(debug)就很快显示linking, 说明能正常计算了。
然后取消生成,再把A程序段注释取消,此后再调试或者运行就很快能linking,能正常计算。

在程序中只调用了内置函数,transpose和matmul,其余函数都是自己编程实现,没有再调用其他函数库。
尝试了很多设置,未能彻底解决此问题,只能用我上述那种笨办法,每改变一次参数,重复前述操作。
所以在此向各位前请教,望不吝指教。谢谢。

分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

2015

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1574 元
贡献
676 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

沙发
发表于 2016-9-23 14:28:43 | 只看该作者
关于VS速度很慢的问题,我想很少有人会回答。
试试用命令行编译吧。

490

帖子

4

主题

0

精华

大宗师

F 币
3298 元
贡献
1948 点

水王勋章元老勋章热心勋章

板凳
发表于 2016-9-23 16:01:58 | 只看该作者
fcode 发表于 2016-9-23 14:28
关于VS速度很慢的问题,我想很少有人会回答。
试试用命令行编译吧。

单个文件代码行数超过四位数的话,肯定快不起来
VS和IVF支持并行编译,类似于make -job=XX命令
lz最好确定,编译环境的硬件与软件都能达到state of the art,英特尔四核cpu+16G内存 + 64位OS + VS和IVF最新版

9

帖子

2

主题

0

精华

入门

F 币
60 元
贡献
35 点
地板
 楼主| 发表于 2016-9-23 19:31:59 | 只看该作者
fcode 发表于 2016-9-23 14:28
关于VS速度很慢的问题,我想很少有人会回答。
试试用命令行编译吧。

谢谢。不是VS本身速度慢。

当注释掉那一段包含调用的程序,运行和调试都正常。
然后再取消注释,原程序运行和调试也都正常。

搞不明白,为什么直接调试就不可以。昨晚又试了一下,一晚上显示:
1>------ 已启动生成: 项目: Hybrid_vara_thick_plate_analysis, 配置: Debug x64 ------
1>Compiling with Intel(R) Visual Fortran Compiler XE 14.0.1.139 [Intel(R) 64]...
1>Larg_Stiffness_R.f90
1>Larg_Stiffness_L.f90
1>Larg_Stiffness.f90
1>Main_Cal.f90

虽然现在用我帖子里的办法能运行,但是还是纠结。

9

帖子

2

主题

0

精华

入门

F 币
60 元
贡献
35 点
5#
 楼主| 发表于 2016-9-23 19:38:29 | 只看该作者
pasuka 发表于 2016-9-23 16:01
单个文件代码行数超过四位数的话,肯定快不起来
VS和IVF支持并行编译,类似于make -job=XX命令
lz最好确定 ...

谢谢。
配置没您说的那么高,我的代码都在300行左右,我试试换别的机器试试

59

帖子

2

主题

0

精华

大师

F 币
810 元
贡献
476 点
6#
发表于 2016-9-23 21:54:36 | 只看该作者
把matmul换成dgemm试一下

490

帖子

4

主题

0

精华

大宗师

F 币
3298 元
贡献
1948 点

水王勋章元老勋章热心勋章

7#
发表于 2016-9-24 08:08:21 | 只看该作者
zzgjtx 发表于 2016-9-23 19:38
谢谢。
配置没您说的那么高,我的代码都在300行左右,我试试换别的机器试试
...

另外一种可能是数组越界或者代码本身有error,但是debug状态下有些编译检查关闭

9

帖子

2

主题

0

精华

入门

F 币
60 元
贡献
35 点
8#
 楼主| 发表于 2016-9-24 08:21:07 | 只看该作者
pasuka 发表于 2016-9-24 08:08
另外一种可能是数组越界或者代码本身有error,但是debug状态下有些编译检查关闭 ...

谢谢,问题已解决。
我尝试了在调试或者运行前,对解决方案进行代码分析,然后我提出的问题就解决了。
但是还是不明白其中道理,有兴趣可以继续探讨。

490

帖子

4

主题

0

精华

大宗师

F 币
3298 元
贡献
1948 点

水王勋章元老勋章热心勋章

9#
发表于 2016-9-24 09:04:40 | 只看该作者
zzgjtx 发表于 2016-9-24 08:21
谢谢,问题已解决。
我尝试了在调试或者运行前,对解决方案进行代码分析,然后我提出的问题就解决了。
但 ...

也许真的是VS的问题,命令行编译应该会快很多

490

帖子

4

主题

0

精华

大宗师

F 币
3298 元
贡献
1948 点

水王勋章元老勋章热心勋章

10#
发表于 2016-9-24 09:13:22 | 只看该作者
kerb 发表于 2016-9-23 21:54
把matmul换成dgemm试一下

编译命令加上-fexternal-blas -fblas-matmul-limit  -finline-matmul-limit就行,何必改动源代码呢

评分

参与人数 1贡献 +9 收起 理由
fcode + 9 高手,受教了

查看全部评分

您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-11-15 07:11

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表