Fortran Coder

标题: data 与 reshape 用法探究 [打印本页]

作者: zjk0112    时间: 2022-8-7 20:23
标题: data 与 reshape 用法探究
本帖最后由 zjk0112 于 2022-8-7 20:31 编辑

我练习改写lapack dgetrf2.f 为dgetrf2.f90。在测试过程中遇到下面问题
1)当我的数组A用data方式表示(如图1)

但是在CTRL+F5 run的过程中结果无法输出(如图2),

用F5 debug run 则显示错误 Run-Time Check Failure #2 - Stack around the variable '.T1555_' was corrupted.(如图3)

把dgetrf2函数注释掉,则可以正常打印a(如图4)

2)当我的数组A用reshape方式表达(如图5)

则在无论时CTRL+F5 还是F5都不会遇到问题,恢复dgetrf2的注释也能正常运行程序,打印dgetrf2的结果(如图6)

但是我不清楚问题发生的原因,希望雪球大神看到帖子可以解答一下。

作者: zjk0112    时间: 2022-8-7 20:32
我想知道data表示的数组是一维数组还是而二维数组,我能不能用data表示二维数组,还是不需要data表示二位数组。
作者: Transpose    时间: 2022-8-7 22:11
本帖最后由 Transpose 于 2022-8-7 22:24 编辑

建议上传完整可运行的有问题的代码,方便查错。初步判断,这个应该和 data reshape 无关
----
data 可以用于任意rank的数组,也可以放在任意位置,只会在程序开始调用一次
reshape 用于改变数组的rank,本身返回一个数组对象

作者: zjk0112    时间: 2022-8-8 00:59
Transpose 发表于 2022-8-7 22:11
建议上传完整可运行的有问题的代码,方便查错。初步判断,这个应该和 data reshape 无关
----
data 可以用 ...

别建议了。能传的都传了。
作者: fcode    时间: 2022-8-8 08:46
3楼说得没错。
data 是按照内存顺序逐个填充,无论数据结构(一维或二维),所以是一种不建议使用的方式。

根据你给出的 program test1 代码,我试了一下,没有重现问题。不管是data还是reshape都是正常的。
(下次尽量复制粘贴代码,不要截图,我重新打一遍有点累)

如果有一份完整的,复制粘贴的代码可以测试,可能会更快的找出问题。

作者: zjk0112    时间: 2022-8-8 18:28
fcode 发表于 2022-8-8 08:46
3楼说得没错。
data 是按照内存顺序逐个填充,无论数据结构(一维或二维),所以是一种不建议使用的方式。
...

好的,感谢雪球大神
作者: zjk0112    时间: 2022-8-8 18:33
Transpose 发表于 2022-8-7 22:11
建议上传完整可运行的有问题的代码,方便查错。初步判断,这个应该和 data reshape 无关
----
data 可以用 ...

万分感谢,确实不是data和reshape的问题,乌龙一场。
作者: zjk0112    时间: 2022-8-8 18:34
本帖最后由 zjk0112 于 2022-8-8 18:40 编辑

破案了,感谢各位的建议和帮助。不过lapack的套娃代码实在有点多,就没截图,下次尝试上传.f90文档。问题不出在data和reshape,而是dgemm这个矩阵乘法的subroutine里面对lda参数理解有偏差。我把lda修改后问题的得到解决。后来,我也重复运行那段问题代码,有时会运行出结果,有时会跑不出值,有时vs2019卡住然后重启。我觉得可能是我IDE有问题。





欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2