作者小头像 Lv.1
47 成长值

个人介绍

这个人很懒,什么都没有留下

感兴趣或擅长的领域

暂无数据
个人勋章
TA还没获得勋章~
成长雷达
20
27
0
0
0

个人资料

个人介绍

这个人很懒,什么都没有留下

感兴趣或擅长的领域

暂无数据

达成规则

发布时间 2022-05-28 13:58:10 最后回复 happy蟑螂小强@汪汪队 2022-05-28 13:58:10 版块 鲲鹏DevKit
404 3 0
发布时间 2022-05-19 14:38:08 最后回复 happy蟑螂小强@汪汪队 2022-05-19 14:38:08 版块 鲲鹏BoostKit
202 2 0
发布时间 2022-05-18 18:54:29 最后回复 happy蟑螂小强@汪汪队 2022-05-19 18:54:29 版块 鲲鹏BoostKit
202 1 0
发布时间 2022-05-17 11:48:52 最后回复 happy蟑螂小强@汪汪队 2022-05-17 11:48:52 版块 鲲鹏
404 3 0
发布时间 2022-05-16 20:11:07 最后回复 chuangzhijian@汪汪队 2022-05-17 20:11:07 版块 鲲鹏
303 2 0
发布时间 2022-05-16 19:18:24 最后回复 happy蟑螂小强@汪汪队 2022-05-16 19:18:24 版块 鲲鹏
202 2 0
发布时间 2022-05-16 12:55:31 最后回复 happy蟑螂小强@汪汪队 2022-05-16 12:55:31 版块 鲲鹏
202 2 0
发布时间 2022-05-06 12:50:09 最后回复 happy蟑螂小强@汪汪队 2022-05-06 12:50:09 版块 鲲鹏
404 2 0
发布时间 2022-05-06 11:44:36 最后回复 happy蟑螂小强@汪汪队 2022-05-06 11:44:36 版块 鲲鹏
303 3 0
发布时间 2021-06-28 15:20:12 最后回复 happy蟑螂小强@汪汪队 2021-07-14 15:20:12 版块 鲲鹏
2020 7 0
他的回复: 您好哈,这个问题其实就是一个,代码调试的问题。我这样来回答你吧。 第一,为什么会出现这个问题? fvcome中包含非常古老的fortran代码,这些代码并不符合严格的fortran标准。https://gcc.gnu.org/onlinedocs/gfortran/Fortran-Dialect-Options.html,GCC手册中,我们可以查阅有关fortran标准的编译参数,当我使用-std=f95时,编译是会报错的,表明代码本生不符合严格的fortran标准,只能使用-std=legacy或者-std=gnu,这些参数可以接受一些non-standard的fortran语法。非标准的语法就给迁移带来了困难,不同CPU架构或者不同的编译器,会有不同的自定义行为。 第二,如何来解决这个问题? 当你在运行新的case的时候,不要注释这段代码,最好从原始的开始调试。调试的步骤可以大致描述为:(1)确定大概的出问题的地方,可以通过core文件,也可以通过屏幕上打印的信息反回去查找代码里面哪个地方在打印;(2)设置断点,比如执行命令“b mod_time::read_datetime”,gdb让程序在mod_time.F的read_datatime函数入口处停下来,假设出错的地方很可能就是这个地方,然后单步跟踪代码,GDB中的命令为next或者step,每执行一行代码,都可以print代码中的变量,检查这些变量是不是符合预期的;(3)如果你能理解代码的原理,相信在单步跟踪的过程中,你会发现代码的执行和你想要的可能不一样,这时就要修改代码的逻辑了,像我,并不能理解fvcome的原理,无法做到从原理上判断代码的执行是否符合预期,则可以通过对比鲲鹏与X86的执行步骤来判断,单步跟踪发现,x86和鲲鹏执行了不一样的代码,可以修改代码,让鲲鹏和x86执行一样的内容。 网上关于如何debuge代码、如何GDB、如何跟踪代码,有很多教程哈,我在这里就不重复了。问题的关键是在,如何定位到出问题的地方,定位出来了就可以修改了。上文也提到,可以通过core文件、打印的信息、与x86对比、或者直接从原理分析等方法。刚开始这会比较困难,需要一些经验,也需要一些时间来熟悉linux系统上这些工具。 另外,对于你们专业的人来说,是否有可能改写fvcome的源码,将其中non-standard的部分,修改为f95/f2003/f2008等标准的写法,这也许能根本上解决fvcome在不同芯片不同编译器之间的迁移。在专业领域这应该是一件很有意义的事情。 最后,再次感谢您对鲲鹏HPC的支持。